2009-03-16 7 views
6

Je ne parviens pas à déterminer comment obtenir des objets à partir du magasin de données Google App Engine à l'aide de get_by_id. Voici le modèleMéthode get_by_id sur les classes Model dans le magasin de données Google App Engine

from google.appengine.ext import db 

class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

Je peux les créer, les mettre et les récupérer avec gql.

address = Address() 
address.description = self.request.get('name') 
address.latitude = float(self.request.get('latitude')) 
address.longitude = float(self.request.get('longitude')) 
address.put() 

Une adresse enregistrée a des valeurs pour

>> address.key() 
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw 
>> address.key().id() 
14 

Je peux les trouver en utilisant la clé

from google.appengine.ext import db 
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw') 

mais ne peut pas les trouver par id

>> from google.appengine.ext import db 
>> address = db.Model.get_by_id(14) 

Le l'adresse est None, quand j'essaie

>> Address.get_by_id(14) 
AttributeError: type object 'Address' has no attribute 'get_by_id' 

Comment puis-je trouver par ID?

EDIT: Il s'avère que je suis un idiot et essayait de trouver un modèle d'adresse dans une fonction appelée Adresse. Merci pour vos réponses, j'ai marqué Brandon comme la bonne réponse quand il est entré en premier et a démontré que tout devrait fonctionner.

Répondre

22

Je viens d'essayer sur shell.appspot.com et il semble fonctionner très bien:

Google Apphosting/1.0 
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42) 
[GCC 4.1.0] 

>>> class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

>>> addy = Address() 
>>> addyput = addy.put() 
>>> addyput.id() 
136522L 
>>> Address.get_by_id(136522) 
<__main__.Address object at 0xa6b33ae3bf436250> 
+0

Merci pour vérifier it out .. Je vais étudier plus avant – tarn

+2

serait +2 si je pouvais pour me faire aussi au courant de la coquille du moteur d'application – tarn

+0

cela fonctionne totalement – Neelesh

6

clé d'une application est une liste de (nature, id_or_name) tuples - pour les entités racines, toujours un seul élément à long. Ainsi, un ID seul n'identifie pas une entité - le type d'entité est également requis. Lorsque vous appelez db.Model.get_by_id (x), vous demandez l'entité avec la clé (Model, x). Ce que vous voulez, c'est appeler Address.get_by_id (x), qui récupère l'entité avec la clé (Address, x).

0

Vous devez utiliser le type long dans get_by_id ("ici"). Int type doit avoir un message d'erreur.

+0

Bien que ce ne soit peut-être pas la réponse à cette question, cela a résolu mon problème. – Nico

Questions connexes