2010-04-14 98 views
0

我想使用memcache來緩存從數據存儲retrevied的數據。儲存叮咬工作正常。但是不能存儲一個對象?我得到一個錯誤「類型錯誤:‘海峽’對象不是可調用」試圖用它來存儲時:使用memcache存儲obj的谷歌應用程序引擎

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)) 
+0

能否請您包括完整的堆棧跟蹤?你粘貼的任何東西都不能解釋你報告的異常情況。 – 2010-04-15 14:54:35

+0

你是對的,它是在其他方法失敗。我使用了另一個類的實例(女巫不需要)或將其更改爲data = {}。它的工作! – fredrik 2010-04-16 12:19:26

回答

0

您可以使用db.model_to_protobuf將您的對象轉換爲可存儲在memcache中的內容。同樣,db.model_from_protobuf會讓你的對象回來。

資源:

Datastore Functions

+0

謝謝。但是我意識到我有點不清楚。我將在上面編輯我的問題。 – fredrik 2010-04-14 12:07:24

+0

什麼是引發的確切錯誤?我在想,它是'pageData = StandardPage(page)',並且你的代碼中有一個範圍錯誤。如果不是,第一次調用之後'print type(PageData)'的輸出是什麼? – msw 2010-04-14 14:45:37

相關問題