Build a GQL query (for Google App Engine) that has a condition on ReferenceProperty

匆匆过客 提交于 2019-12-05 00:17:46


Say I have the following model:

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)

And let's say I have a Station object stored in the var foo.

How do I assemble a GQL query that returns all Schedule objects with a reference to the Station object referenced by foo?

This is my best (albeit incorrect) attempt to form such a query:

myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())

Once again foo is a Station object


You shouldn't be inserting user data into a GQL string using string substitution. GQL supports parameter substitution, so you can do this:

db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())

or, using the Query interface:

Schedule.all().filter("station =", foo.key())


An even easier thing to do is to change the model definition by adding the 'collection_name' field to the ReferenceProperty:

station = db.ReferenceProperty(Station, required=True, collection_name="schedules")

Then you can just do:


whenever you want to get all the stations' schedules.