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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top