构建具有ReferenceProperty条件的GQL查询(对于Google App Engine)

Rya*_*chi 5 python google-app-engine gql

说我有以下型号:

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)
Run Code Online (Sandbox Code Playgroud)

让我们说我有一个存储在var中的Station对象foo.

如何组装一个GQL查询,该查询返回所有Schedule对象,并引用由foo?引用的Station对象?

这是我最好的(虽然不正确)尝试形成这样的查询:

myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())
Run Code Online (Sandbox Code Playgroud)

再一次fooStation对象

Nic*_*son 10

您不应该使用字符串替换将用户数据插入GQL字符串.GQL支持参数替换,因此您可以这样做:

db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())
Run Code Online (Sandbox Code Playgroud)

或者,使用Query接口:

Schedule.all().filter("station =", foo.key())
Run Code Online (Sandbox Code Playgroud)

  • FWIW,在第二种情况下无需放入foo.key().这将工作:Schedule.all().filter("station =",foo) (2认同)

Tra*_*ean 7

更简单的方法是通过将'collection_name'字段添加到ReferenceProperty来更改模型定义:

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

然后你可以这样做:

foo.schedules

无论何时你想获得所有车站的时刻表.