Python 使用memcache存储obj';google应用程序引擎中的s

Python 使用memcache存储obj';google应用程序引擎中的s,python,google-app-engine,memcached,Python,Google App Engine,Memcached,我正在尝试使用memcache缓存从数据存储中检索的数据。储存毒刺效果很好。但是一个人不能存储一个对象吗?我在尝试存储时遇到错误“TypeError:'str'对象不可调用”: pageData = StandardPage(page) memcache.add(memcacheid, pageData, 60) 我在文档中读到它要求“值类型可以是Python pickle模块支持的用于序列化值的任何值。”但我并不真正理解这是什么。或者如何将页面数据转换为它 有什么想法吗 …弗雷德里克

我正在尝试使用memcache缓存从数据存储中检索的数据。储存毒刺效果很好。但是一个人不能存储一个对象吗?我在尝试存储时遇到错误“TypeError:'str'对象不可调用”:

pageData = StandardPage(page)    
memcache.add(memcacheid, pageData, 60)
我在文档中读到它要求“值类型可以是Python pickle模块支持的用于序列化值的任何值。”但我并不真正理解这是什么。或者如何将页面数据转换为它

有什么想法吗

…弗雷德里克

编辑:

我有点不清楚。PageType是一个从数据存储中获取数据并对其进行操作的类。该类如下所示:

class PageType():
    def __init__(self, page):
        self.pageData = PageData(data.Modules.gql('WHERE page = :page', page = page.key()).fetch(100))
        self.modules = []

    def renderEditPage(self):
        self.addModules()
        return self.modules



class StandardPage(PageTypes.PageType):
    templateName = 'Altan StandardPage'
    templateFile = 'templates/page.html'

    def __init__(self, page):
        self.pageData = PageTypes.PageData(data.Modules.gql('WHERE page = :page', page = page.key()).fetch(100))
        self.modules = []
        self.childModules = []

        for child in page.childPages:
            self.childModules.append(PageTypes.PageData(data.Modules.gql('WHERE page = :page', page = child.key()).fetch(100)))

    def addModules(self):
        self.modules.append(PageTypes.getStandardHeading(self, 'MainHeading'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'FirstTextBox'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'SecondTextBox'))
        self.modules.append(PageTypes.getStandardHeading(self, 'ListHeading'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'ListTextBox'))
        self.modules.append(PageTypes.getDynamicModules(self))

您可以使用
db.model_to_protobuf
将对象转换为可以存储在memcache中的内容。类似地,protobuf中的db.model将取回您的对象

资源:


谢谢。但我意识到我有点不清楚。我将编辑上面的问题。抛出的确切错误是什么?我认为它是
pageData=StandardPage(page)
,代码中有一个范围错误。如果没有,在第一次调用后,
打印类型(PageData)
的输出是什么?您能包含完整的堆栈跟踪吗?您粘贴的任何内容都不能解释您报告的异常。您是对的,是在另一个方法中失败的。我使用了另一个类的实例(不需要witch)或将其更改为data={}。成功了!