2010-04-14 6 views
0

J'essaie d'utiliser memcache pour mettre en mémoire cache les données renvoyées du magasin de données. Le stockage des piqûres fonctionne bien. Mais ne peut-on pas stocker un objet? Je reçois une erreur « Erreur de type: objet « str » est pas appelable » en essayant de stocker avec ceci:Utilisation de memcache pour stocker obj dans google app engine

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

J'ai lu dans la documentation qu'il exige « Le type de valeur peut être une valeur prise en charge par la Module pickle Python pour la sérialisation des valeurs. " Mais ne comprends pas vraiment ce que c'est. Ou comment convertir pageData en elle.

Des idées?

..fredrik

EDIT:

j'étais un peu clair. PageType est une classe qui, entre autres choses, obtient des données du magasin de données et les manipule. La classe ressemble à ceci:

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

Pouvez-vous s'il vous plaît inclure le stacktrace? Rien de ce que vous avez collé n'expliquerait l'exception que vous signalez. –

+0

Vous avez raison, c'était dans une autre méthode qui a échoué. J'ai utilisé une instance d'une autre classe (qui n'était pas nécessaire) ou je l'ai changée en data = {}. Et ça a marché! – fredrik

Répondre

0

Vous pouvez utiliser db.model_to_protobuf pour transformer votre objet en quelque chose qui peut être stocké dans memcache. De même, db.model_from_protobuf récupérera votre objet.

ressources:

Datastore Functions

+0

Merci. Mais je réalise que j'étais un peu confus. Je vais modifier ma question ci-dessus. – fredrik

+0

Quelle est l'erreur exacte qui est lancée? Je pense que c'est 'pageData = StandardPage (page)' et vous avez une erreur de portée dans votre code. Si non, quelle est la sortie de 'print type (PageData)' après le premier appel? – msw