Erstellen Sie eine GQL Abfrage (für Google App Engine), die eine Bedingung für Reference hat
-
21-08-2019 - |
Frage
Sagen, dass ich das folgende Modell haben:
class Schedule(db.Model):
tripCode = db.StringProperty(required=True)
station = db.ReferenceProperty(Station, required=True)
arrivalTime = db.TimeProperty(required=True)
departureTime = db.TimeProperty(required=True)
Und lassen Sie uns sagen, dass ich ein Stationsobjekt in der var foo
gespeichert haben.
Wie zusammenbauen ich eine GQL Abfrage, die alle Schedule Objekte mit einem Verweis auf die Stations Objekt durch foo
verwiesen zurück?
Das ist meine beste (wenn auch falsch ) Versuch, eine solche Abfrage zu bilden:
myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())
Wieder einmal foo
ist ein Station Objekt
Lösung
Sie sollten nicht seine Benutzerdaten in eine GQL String Einfügen String-Ersetzung verwendet. GQL unterstützt Parameter Substitution, so können Sie dies tun:
db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())
oder über die Query-Schnittstelle:
Schedule.all().filter("station =", foo.key())
Andere Tipps
Ein noch einfacheres, was zu tun ist, um die Bestimmung des Modells zu ändern, indem Sie das ‚collection_name‘ Feld auf die Reference:
Station = db.ReferenceProperty (Station, erforderlich = True, collection_name = "Zeitplan")
Dann können Sie einfach tun:
foo.schedules
, wenn Sie alle Stationen Zeitpläne erhalten möchten.