2010-10-06 5 views

Répondre

73

Essayez ceci:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
+0

Merci, ça marche! –

+4

GQL! Comment ne peux-tu pas l'aimer?/irony – Nilzor

+0

Cela fait une correspondance complète sur la clé plutôt que sur la partie ID de la clé. Je voudrais obtenir toutes les entités avec l'identifiant numérique donné, pas seulement celui avec aucun parent. – aij

0

Dans mon cas, je devais changer le type d'ID de chaîne à Long

5

Malheureusement, il ne semble pas être un moyen d'écrire une requête équivalente à

SELECT * FROM Model WHERE id = <numeric_id> 

qui sélectionnerait toutes les entités Modèle avec l'ID donné. Si vous êtes ok avec quelque chose d'équivalent à

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL 

vous pouvez utiliser quelque chose comme

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 

Si votre entité a un parent bien, vous aurez besoin de préciser que dans le cadre de la clé, comme

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>) 

Si le parent lui-même a un parent, vous devrez également le spécifier. (Grand-parent prend la gauche du parent, etc.)

Bien sûr, si vous n'êtes pas limité à GQL (comme si vous utilisez Python, Go ou Java), vous pouvez interroger les clés, les décoder et filtrez par ID, puis récupérez les entités correspondantes. Mais bien sûr, cela ne fonctionne pas dans Datastore Viewer puisque vous ne pouvez utiliser que GQL.

3

Une autre façon autour est, d'abord obtenir la clé de l'entité en utilisant l'identifiant par

key = db.Key.from_path('Model', int(id)) 

alors obtenir l'objet par

obj = db.get(key) 

L'avantage est, vous ne devez pas faire tout formatage de chaîne.

référence: ensemble de problèmes 3 à ce cours, https://classroom.udacity.com/courses/cs253/

+0

Vous devez supprimer le '.' après 'from_path' qui est une erreur de syntaxe. Cela fonctionne autrement si – xerotolerant

Questions connexes