Was ist der rohe GQL eine Reference zu überprüfen?
-
21-09-2019 - |
Frage
Ich habe die folgenden Modelle:
class Author(db.Model):
name = db.StringProperty()
class Story(db.Model):
author = db.ReferenceProperty(Author)
Was die rohe GQL ist alles Geschichte von einem bestimmten Autor zu finden. In regelmäßigen SQL, werde ich schließt sich verwenden, aber ich glaube nicht, dass in GQL verfügbar ist.
Edit:
Ich bin für den rohen GQL Weg suche, weiß ich, wie es die Pythonic Art und Weise zu tun. Zum Beispiel so etwas wie (ist die folgende wahrscheinlich völlig falsch):
"SELECT * FROM Story WHERE author = :1", "Shakespeare"
Ich möchte die oben vom GAE Admin-Daten> Data Viewer> Abfrage der Datenspeicher laufen. Ich mag die rohe SQL, dass jemand aus einem typischen mysql oder psql Shell ausführen könnte.
Lösung
Edit2: Ah, der raw-GQL zur Verwendung in den Daten-Viewer ...
Hier ist eine Möglichkeit:
1) Führen Sie dieses und erhalten Sie die ID-Nummer:
SELECT * FROM Author where name = 'shakespeare'
2) Unter Verwendung von ID-Nummer aus vorheriger Abfrage, führen Sie diese:
SELECT * FROM Story where author = key('Author', 12345)
Edit: endlich die rohe GQL:
(Der einfachste Weg:. Verwenden Sie die implizite Rückreferenzierung Eigenschaftsnamen, in der Form "modelname_set")
qry = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare")
shakespeare = qry.get()
shakespeare.story_set # this property now contains all Shakespeare's stories
oder
qry0 = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare")
shakespeare = qry0.get()
qry1 = GqlQuery("SELECT * FROM Story WHERE author = :1", shakespeare.key())
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here
Ich ziehe es auf diese Weise:
qry = Author.all()
qry.filter('name = ', 'shakespeare')
shakespeare = qry.get()
shakespeare.story_set # this property now contains all Shakespeare's stories
Die aufwändigere Weise kann manchmal notwendig sein:
qry0 = Author.all()
qry0.filter('name = ', 'shakespeare')
shakespeare = qry0.get()
qry1 = Story.all()
qry1.filter('author = ', shakespeare.key())
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here