Wie schreibe ich eine Abfrage für den Entitätsschlüssel mithilfe von GQL im Google App Engine Data Viewer?
Im Viewer wird die erste Spalte (ID / Name) als angezeigt name=_1
, in der Detailansicht wird der Schlüssel als angezeigt
Decoded entity key: Programme: name=_1
Entity key: agtzcG9...................
Diese Abfrage funktioniert nicht:
SELECT * FROM Programme where name = '_1'
Bei numerischen IDs funktioniert ein Formular ähnlich der Abfrage nach Namen:
Ich fand dieses Formular besonders nützlich in der Admin-Konsole.
quelle
Sie müssen keine Abfrage durchführen, um eine Entität nach Schlüssel zu erhalten. Sie können die Entität einfach anhand ihres Schlüssels abrufen. In Python können Sie dies mit tun
MyModel.get_by_key_name('_1')
. Dies ist drei- bis fünfmal schneller als Adams Vorschlag, eine Abfrage zu verwenden.quelle
__key__
Abfragen im Allgemeinen direkt aus der Entitätstabelle selbst gelesen, anstatt zuerst aus den Indizes und dann aus der Entitätstabelle. In der Praxis gibt es also keinen großen Unterschied zwischen einer__key__ ==
Abfrage und einer Abfrage , wenn der Datenspeicher diese Abfrage zu einer rohen bigtable-Suche oder einem Scan zusammenstelltget()
. Dies ist natürlich ein Implementierungsdetail. Es ist immer noch eine gute Vorgehensweise,get()
wenn Sie eine einzelne Entität suchen.__key__
Abfragen werden niemals aus der Entitätstabelle gelesen. Sie lesen aus Indextabellen, die alle Tabellen außer der Entitätstabelle enthalten. Die Indextabellen zeigen alle auf einen Schlüssel. Unabhängig davon, welchen Index Sie für die Suche verwenden, stammt Ihr Schlüssel daher. In 1.6.5 gibt es Projektionsabfragen, um den Schlüssel und die übereinstimmenden Indexdaten zum gleichen Preis wie eine Schlüsselabfrage zu lesen ... ... nämlich, dass Sie die Entitätstabelle niemals in Konflikt bringen müssen.Bei der Abfrage nach Schlüssel müssen Sie genau mit dem Schlüssel übereinstimmen, einschließlich des übergeordneten Schlüssels und nicht nur der ID oder des Namens. Wenn das übergeordnete Element wie im obigen Beispiel null ist, reichen natürlich die ID oder der Name und der Entitätstyp aus.
Wenn Sie den bereits codierten Entitätsschlüssel haben, können Sie diesen wie folgt verwenden:
Für das einfache Beispiel oben
wird tun, aber wenn Ihr Schlüssel ein Elternteil hat, wie
Dann wäre die Abfrage
Wenn der Elternteil selbst einen Elternteil hat, müssen Sie diesen ebenfalls hinzufügen. Weitere Informationen finden Sie in der offiziellen GQL-Dokumentation .
Es scheint keine Möglichkeit zu geben, unabhängig vom Elternteil alles mit derselben ID oder demselben Namen auszuwählen.
quelle
Nur eine kurze Anmerkung dazu: Wenn ich Anführungszeichen um eines der Argumente in KEY verwende, schlägt der Aufruf fehl (in der Administratorkonsole wird das Fehler-Popup angezeigt).
Für den Typ "mytype" mit der ID / dem Namen 12345 funktioniert dies beispielsweise NICHT :
Aber das tut:
quelle