在Google App Engine中使用memcache存储对象

0 投票
1 回答
863 浏览
提问于 2025-04-15 21:35

我正在尝试使用memcache来缓存从数据存储中获取的数据。存储字符串没问题。但是,存储对象就不行了。当我尝试用以下代码存储时,出现了一个错误:“TypeError: 'str' object is not callable”。

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

我在文档中看到,它要求“值的类型可以是Python pickle模块支持的任何值,用于序列化值。”但我对这个概念不是很理解。也不知道怎么把pageData转换成这个格式。

有没有什么想法?

..fredrik

编辑:

我之前说得不太清楚。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

你可以使用 db.model_to_protobuf 把你的对象转换成可以存储在内存缓存中的格式。类似地,db.model_from_protobuf 可以把你的对象再取回来。

资源:

数据存储功能

撰写回答