72 votes

Comment interroger GQL avec la clé d'entité

Comment écrire une requête sur la clé d'entité à l'aide de GQL dans la visionneuse de données de Google App Engine?

Dans la visionneuse, la première colonne (Id / Nom) s’affiche sous la forme name=_1 . Dans la vue détaillée, elle affiche la clé sous la forme suivante:

 Decoded entity key: Programme: name=_1
Entity key: agtzcG9................... 
 

Cette requête ne fonctionne pas:

 SELECT * FROM Programme where name = '_1'
 

105voto

Adam Crossland Points 12310

Vous pouvez utiliser la clé de l'entité pour la récupérer:

 SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')
 

Et, vous devriez pouvoir interroger en utilisant le nom de la même manière:

 SELECT * FROM Programme where __key__ = KEY('Programme', '_1')
 

Notez que ce n'est pas quelque chose que vous voudriez faire dans votre application AppEngine; comme Nick le note dans son commentaire, c'est une énorme perte de temps. Vraiment, cet exemple n’est utile que pour vous montrer comment interroger par clé dans la console d’administration.

20voto

Jeffrey Miller Points 151

Pour les ID numériques, un formulaire similaire à la requête par nom fonctionne:

 SELECT * from Programme where __key__ = KEY('Programme', 1234567)
 

J'ai trouvé ce formulaire particulièrement utile dans la console d'administration.

18voto

Nick Johnson Points 79909

Vous n'avez pas du tout besoin d'interroger pour obtenir une entité par clé - vous pouvez simplement extraire l'entité par sa clé. En Python, vous pouvez le faire avec MyModel.get_by_key_name ('_ 1'). C'est 3 à 5 fois plus rapide que la suggestion d'Adam d'utiliser une requête.

2voto

aij Points 408

Lors de l'interrogation par la clé, vous avez besoin pour correspondre à la clé, y compris les parents et pas juste l'ID ou le nom. Bien sûr, si le parent est nulle, comme dans l'exemple ci-dessus, l'ID ou le Nom et le type de l'entité est assez.

Si vous avez déjà codé entité clé, vous pouvez l'utiliser comme:

SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')

Pour l'exemple simple ci-dessus,

SELECT * FROM Programme where __key__ = KEY('Programme', '_1')

fera, mais si votre clé a un parent, comme

Paren: id=123

Alors, la requête serait

SELECT * FROM Programme where __key__ = KEY('Paren', 123, 'Programme', '_1')

Si le parent a lui-même un parent, vous avez besoin d'ajouter que trop. Pour plus de détails, voir l' officiel GQL de la documentation.

Il ne semble pas être un moyen pour sélectionner tous les éléments avec le même ID ou le nom indépendamment de leur parent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X