在googleappengin中使用嵌套和/或执行祖先查询

2024-06-16 17:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Google App Engine NDB,并尝试执行以下查询:

query = Club.query(ndb.OR(
ndb.AND(Club.memberIds == userId, Club.modifiedDate > date), 
ndb.AND(Club.activityDate > date, ancestor = userKey)
))

但是,我得到一个运行时错误:

^{pr2}$

这和祖先的地位有关。This answer能够在一个例子中指出解决方案,但是这个解决方案在这里不适用,因为祖先在实际的AND子句中。在

  1. 如何重新格式化此查询以工作?在
  2. 这是个坏主意吗?是不是太复杂了?由于它的复杂性,它会花费我比平常更多的阅读吗?在

Tags: orandappdategoogle解决方案queryengine
2条回答

不能将祖先用作筛选器的一部分;它必须是直接在query()调用中使用的关键字参数。当前,OR查询无论如何都会变成多个查询,因此OR()方法给您的唯一好处是更容易地组合结果。但要实现这一点,您无论如何都必须按键排序,编写一个小的merge函数来合并按键排序的两组查询结果,这很简单。(也可以通过调用ndb.查询.\u MultiQuery(),但后者不是一个文档化的API,而且很难正确使用,所以最好自己来做。)

是否可以重写查询以使用GQL?在

编辑

否决我自己的建议。不可能重写查询以使用GQL。GQL不支持OR。在

参见:https://developers.google.com/appengine/docs/python/datastore/gqlreference

class Club(ndb.Model):
    parent = ndb.KeyProperty()

相关问题 更多 >