Comment écrire une requête sur la clé d'entité à l'aide de GQL dans la visionneuse de données Google App Engine?
Dans la visionneuse, la première colonne (Id/Nom) s'affiche comme name=_1
, dans la vue de détail, il montre la clé comme
Decoded entity key: Programme: name=_1
Entity key: agtzcG9...................
Cette requête ne fonctionne pas:
SELECT * FROM Programme where name = '_1'
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 le note Nick 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.
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.
Vous n'avez pas besoin d'interroger pour obtenir une entité par clé - vous pouvez simplement récupérer 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.
Lorsque vous interrogez par clé, vous devez faire correspondre la clé exactement, y compris le parent et pas seulement l'ID ou le nom. Bien sûr, si le parent est nul, comme dans l'exemple ci-dessus, l'ID ou le nom et le type d'entité sont suffisants.
Si vous avez la clé d'entité déjà encodée, vous pouvez simplement 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
La requête serait alors
SELECT * FROM Programme where __key__ = KEY('Paren', 123, 'Programme', '_1')
Si le parent lui-même a un parent, vous devez également l'ajouter. Pour plus de détails, consultez la documentation GQL officielle .
Il ne semble pas y avoir de moyen de tout sélectionner avec le même ID ou le même nom, quel que soit le parent.
Juste une petite note à ce sujet: lorsque j'utilise des guillemets autour de l'un des arguments de KEY, l'appel échoue (dans la console d'administration, j'obtiens la fenêtre d'erreur).
Par exemple, pour le type "mon type" avec l'ID/le nom 12345, cela ne NE PAS travail:
SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')
Mais cela fait:
SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)