使用memcache在谷歌应用引擎中存储obj

时间:2010-04-14 11:31:45

标签: python google-app-engine memcached

我正在尝试使用memcache来缓存从数据存储中恢复的数据。存储蜇伤很好。但是不能存储一个对象吗?我在尝试存储时遇到错误“TypeError:'str'对象不可调用”:

pageData = StandardPage(page)    
memcache.add(memcacheid, pageData, 60)

我在文档中读到它需要“值类型可以是Python pickle模块支持序列化值的任何值。”但是不要真正理解那是什么。或者如何将pageData转换为它。

有什么想法吗?

..弗雷德里克

修改

我有点不清楚。 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))

1 个答案:

答案 0 :(得分:0)

您可以使用db.model_to_protobuf将对象转换为可以存储在memcache中的对象。同样,db.model_from_protobuf会让你的对象回来。

<强>资源:

Datastore Functions