Costruire un GQL query (per Google App Engine) che ha una condizione ReferenceProperty
-
21-08-2019 - |
Domanda
Dire ho il seguente modello:
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)
E diciamo che ho un oggetto di Stazione memorizzata nel var foo
.
Come faccio a montare un GQL query che restituisce tutte Pianificazione di oggetti con un riferimento alla Stazione di oggetto a cui fa riferimento foo
?
Questo è il mio migliore (anche se errata) tentativo di formare una query di questo tipo:
myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())
Ancora una volta foo
è un Stazione oggetto
Soluzione
Non si dovrebbero inserire i dati utente in un GQL stringa usando la stringa di sostituzione.GQL supporta la sostituzione del parametro, in modo che si può fare questo:
db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())
o, utilizzando l'interfaccia di Query:
Schedule.all().filter("station =", foo.key())
Altri suggerimenti
Ancora più facile cosa da fare è modificare la definizione del modello aggiungendo il 'collection_name' campo per il ReferenceProperty:
stazione = db.ReferenceProperty(Stazione required=True, collection_name="orari")
Poi si può semplicemente fare:
pippo.orari
ogni volta che si desidera ottenere tutte le stazioni di orari.