2010-09-30 18 views
0

Salut je traverse la documentation de GAE et avait besoin d'une petite précision. Si j'ai mon modèle db quelque chose comme ceci: -Google AppEngine-db.key()

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(Nokia, key_name='first') 
r.put() 

Maintenant, si je dois récupérer cette entité, mais je ne sais pas la clé, puis-je construire la clé comme ceci:

k=db.Key('Phone','first') 

et une fois la clé est construite, l'entité peut être récupérée comme ceci: -

r=db.get(k) 

Répondre

2

Vous êtes proche. La seule différence majeure est que vous devez passer la classe réelle au lieu d'une chaîne représentant le nom de la classe, et que vous devez utiliser la méthode usine Key.from_path() plutôt que le constructeur par défaut:

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(phone_name='Nokia', key_name='first') 
r.put() 

k = db.Key.from_path('Phone', 'first') 

r = db.get(k) 

Dans l'ensemble , cependant, j'ai trouvé que s'appuyer sur les ID générés automatiquement est généralement une meilleure solution que de spécifier vos propres noms de clés. Y a-t-il une raison particulière pour laquelle vous faites ce dernier?

+0

Merci beaucoup! ... J'apprends juste – Rasmus

+1

Je ne pense pas que les ID sont générés automatiquement mieux, ils ont juste un cas d'utilisation différente. Si vous disposez d'un identifiant prévisible, fixe et unique pour une entité avant son stockage, les noms de clés constituent une solution parfaitement adaptée. –

+0

Je suis d'accord que chacun a leur utilisation (d'où "habituellement"). Il est juste que dans la plupart des cas, vous seriez dupliquez l'effort de générer des identifiants uniques, d'autant plus à la fin, il est beaucoup plus pratique de passer les clés codées autour plutôt que ID ou les noms. –

Questions connexes