2010-10-06 26 views
34

Ich möchte GQL-Abfrage erstellen, um ein Objekt mit seiner numerischen ID abzurufen. Ich mache das im Datastore-Viewer in der App-Verwaltungskonsole, sodass ich Model.get_by_id (numeric_id) nicht verwenden kann. Etwas wieGQL-Abfrage mit numerischer ID im Datenspeicher-Viewer

SELECT * FROM Model WHERE id = <numeric_id> 

funktioniert auch nicht.

Antwort

73

Versuchen Sie folgendes:

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

Dank, es funktioniert! –

+4

GQL! Wie kannst du es nicht lieben./ironie – Nilzor

+0

Das macht eine vollständige Übereinstimmung mit dem Schlüssel und nicht nur mit dem ID-Teil des Schlüssels. Ich möchte alle Entitäten mit der angegebenen numerischen ID abrufen, nicht nur die ohne übergeordnete Entität. – aij

0

In meinem Fall hatte ich leider zu lange

5

die Art der Identifikation von String zu ändern, es scheint keinen Weg, um eine Abfrage entspricht

zu schreiben
SELECT * FROM Model WHERE id = <numeric_id> 

, die alle Model-Entitäten mit der angegebenen ID auswählen würden. Wenn Sie gleich

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

mit etwas ok sind, können Sie so etwas wie

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

verwenden Wenn Ihr Unternehmen tut, obwohl ein Elternteil haben, müssen Ihnen mitteilen, dass als Teil des Schlüssels angeben, wie

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

Wenn der Elternteil selbst einen Elternteil hat, müssen Sie das auch angeben. (Großeltern geht links vom Elternteil und so weiter.)

Natürlich, wenn Sie nicht auf GQL beschränkt sind (wie wenn Sie Python, Go oder Java verwenden), können Sie die Schlüssel abfragen, sie decodieren und nach ID filtern, dann die entsprechenden Entitäten holen. Das funktioniert natürlich nicht im Datastore Viewer, da Sie nur GQL verwenden können.

3

Eine andere Möglichkeit, um, muss zunächst die Schlüssel für das Unternehmen erhalten die ID von

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

dann durch das Objekt erhalten mit

obj = db.get(key) 

Der Vorteil ist, müssen Sie zu einem nicht tun String-Formatierung

Referenz: Problem Set 3 bei diesem Kurs https://classroom.udacity.com/courses/cs253/

+0

Sie sollten die '.' nach 'from_path' ist das ein Syntaxfehler. Es funktioniert aber anders – xerotolerant

Verwandte Themen