1

我的应用程序中有以下查询

query = cls.query().filter(cls.taskgroup_id == taskgroup_id, cls.availability == True, cls.task_id > min_task_id).order(cls.task_id) query.fetch(1)

上面的工作正常如预期。(仅获取那些与 taskgroup_id 匹配且可用且 task_id > min_task_id 的实体)

但是,当我将查询分成多个语句时。

query = cls.query()
query.filter(cls.taskgroup_id == taskgroup_id)
query.filter(cls.availability == True)
query.filter(cls.task_id > min_task_id)

它没有按预期工作。

当我运行 [2] 时,查询形成分解为多个语句,它返回给我一个可用性为 False 的实体,并且 task_id 等于 min_task_id。

[2] 没有按预期(或按我预期)工作。我认为这里存在用户错误。想知道它是什么。

4

1 回答 1

2

按属性值过滤(强调我的):

query = Account.query(Account.userid >= 40, Account.userid < 50)

[...]

与在单个表达式中指定整个查询过滤器不同,您可能会发现分步构建它更方便:例如:

appengine/standard/ndb/queries/snippets.py

query1 = Account.query()  # Retrieve all Account entitites
query2 = query1.filter(Account.userid >= 40)  # Filter on userid >= 40
query3 = query2.filter(Account.userid < 50)  # Filter on userid < 50 too

query3等效于query上一个示例中的变量。请注意,查询对象是不可变的,因此 的 构造 query2不影响query1并且 的构造query3 不影响query1or query2

换句话说,对于您的示例,没有任何query.filter()语句实际修改query.

只需将语句的结果分配给局部变量并使用它们,就像在引用的示例中一样。

于 2016-11-19T06:19:47.660 回答