构建一个针对ReferenceProperty有条件的GQL查询(用于Google App Engine)

5 投票
2 回答
4228 浏览
提问于 2025-04-15 11:32

假设我有一个这样的模型:

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)

现在假设我有一个名为 foo 的变量,它里面存储了一个 Station 对象。

我该如何写一个 GQL 查询,来获取所有与 foo 这个 Station 对象相关联的 Schedule 对象呢?

这是我最好的尝试(虽然不正确)来构建这样的查询:

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

再说一遍,foo 是一个 Station 对象

2 个回答

7

更简单的方法是通过在引用属性中添加 'collection_name' 字段来改变模型的定义:

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

这样你就可以直接使用:

foo.schedules

每当你想获取所有车站的时间表时,就可以这样做。

10

你不应该通过字符串替换的方式把用户数据放进GQL字符串里。GQL支持参数替换,所以你可以这样做:

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

或者,使用查询接口:

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

撰写回答