75 Stimmen

Wie kann ich in GQL mit dem Entitätsschlüssel abfragen

Wie schreibe ich eine Abfrage gegen den Entitätsschlüssel mit GQL im Google App Engine Data Viewer?

Im Viewer wird die erste Spalte (Id/Name) als name=_1 in der Detailansicht wird der Schlüssel als

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

Diese Abfrage funktioniert nicht:

SELECT * FROM Programme where name = '_1'

109voto

Adam Crossland Punkte 14129

Sie können den Schlüssel der Entität verwenden, um sie abzurufen:

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

Und Sie sollten in der Lage sein, den Namen in ähnlicher Weise abzufragen:

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

Beachten Sie, dass dies nichts ist, was Sie in Ihrer AppEngine-Anwendung tun sollten; wie Nick in seinem Kommentar anmerkt, ist dies eine große Zeitverschwendung. Dieses Beispiel ist wirklich nur dazu gut, Ihnen zu zeigen, wie Sie in der Verwaltungskonsole eine Abfrage nach Schlüssel durchführen können.

20voto

Jeffrey Miller Punkte 201

Bei numerischen IDs funktioniert eine ähnliche Form wie bei der Abfrage nach Namen:

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

Ich fand dieses Formular besonders in der Admin-Konsole nützlich.

18voto

Nick Johnson Punkte 99799

Sie müssen keine Abfrage durchführen, um eine Entität nach Schlüssel zu erhalten - Sie können die Entität einfach nach ihrem Schlüssel abrufen. In Python können Sie dies mit MyModel.get_by_key_name('_1') . Dies ist 3 bis 5 Mal schneller als Adams Vorschlag, eine Abfrage zu verwenden.

3voto

aij Punkte 4973

Bei der Abfrage nach Schlüssel müssen Sie den Schlüssel genau abgleichen, einschließlich des übergeordneten Schlüssels und nicht nur die ID oder den Namen. Wenn das übergeordnete Element nicht vorhanden ist, wie im obigen Beispiel, reichen natürlich die ID oder der Name und die Art der Entität aus.

Wenn Sie den bereits kodierten Entitätsschlüssel haben, können Sie diesen einfach verwenden:

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

Für das obige einfache Beispiel,

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

reicht aus, aber wenn Ihr Schlüssel einen Elternteil hat, wie

Paren: id=123

Dann würde die Abfrage lauten

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

Wenn das übergeordnete Element selbst ein übergeordnetes Element hat, müssen Sie auch dieses hinzufügen. Für weitere Einzelheiten siehe die offizielle GQL-Dokumentation .

Es scheint keine Möglichkeit zu geben, alles mit derselben ID oder demselben Namen unabhängig von der übergeordneten Organisation auszuwählen.

1voto

Tim Consolazio Punkte 4591

Nur eine kurze Anmerkung dazu: Wenn ich Anführungszeichen um eines der Args in KEY verwende, schlägt der Aufruf fehl (in der Verwaltungskonsole erhalte ich das Fehler-Popup).

Für den Typ "mytype" mit ID/Name 12345 bedeutet dies zum Beispiel NICHT Arbeit:

SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')

Aber das hier schon:

SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X