2009-09-12 7 views
3

sur Google AppEngine, vous pouvez récupérer la valeur de clé de hachage en faisant une requête commeGQL obtenir champ ID

 
select __key__ from furniture 

Mais AppEngine datastore maintient un champ ID bien pour chaque type auto-incrémentée.

Comment puis-je y accéder à partir d'une requête?

 
select ID from furniture 

ne fonctionne pas

+2

L'ID est pas "auto-incrémenté". Ils sont garantis uniques au sein d'un même groupe d'entités et d'entités, mais il est peu probable qu'ils soient continus et ne sont pas garantis d'augmenter. (Sur le serveur de développement, ils sont séquentiels.) – geoffspear

Répondre

4

Je crois qu'une requête Gcl ne peut pas intégrer des appels à accesseur méthodes ou l'extraction d'attributs (beaucoup dans la même veine que le fait qu'il ne peut faire "SELECT * FROM" chercher des entités entières ou "SELECT __key__ FROM" pour aller chercher les clés seulement - il ne peut pas choisir les champs comme dans [hypothétique -)] "SELECT this, that FROM «)

donc, vous devez chercher les clés, puis appelez accesseur de chaque touche .id() (si vous voulez None pour les clés. qui n'ont pas d'identifiant mais un nom, utilisez .id_or_name() si vous préférez obtenir le nom, s'il est disponible, et None seulement en dernier recours). Par exemple, pour obtenir les ID non Aucun seulement:

thekeys = db.GqlQuery('SELECT __key__ FROM Whatever').fetch(1000) 
theids = [k.id() for k in thekeys if k.id() is not None] 
+1

Absolument correct, sauf que la condition devrait probablement être "if k.has_id()" - ou omettre et utiliser "k.id_or_name()". –

+0

@Nick, merci! 'has_id' n'est PAS documenté sur http://code.google.com/appengine/docs/python/datastore/keyclass.html donc je suis réticent à l'utiliser ou je conseille aux autres de l'utiliser - si c'est un bug de docs, Je serai heureux de l'ouvrir dans le tracker et/ou l'aider à l'ajuster dans 20% du temps, bien sûr ;-). –

5

vous pouvez également essayer

entity.key().id() 
+0

ses travaux parfaitement trier et douce sloution merci beaucoup .. –

Questions connexes