我正在使用Google App Engine NDB,并尝试执行以下查询:
query = Club.query(ndb.OR(
ndb.AND(Club.memberIds == userId, Club.modifiedDate > date),
ndb.AND(Club.activityDate > date, ancestor = userKey)
))
但是,我收到运行时错误:
TypeError: __new__() got an unexpected keyword argument 'ancestor'
它与祖先的位置有关。 This answer能够在一个案例中指出解决方案,但该解决方案不适用于此,因为祖先在实际的AND子句中。
答案 0 :(得分:1)
是否可以重写查询以使用GQL?
修改强>
击落我自己的建议。无法重写查询以使用GQL。 GQL不支持OR
。
请参阅:https://developers.google.com/appengine/docs/python/datastore/gqlreference
<强> SUGGESTION 强> 如果还将祖先对象修改为“模型”属性,则可以执行所需的查询。 E.g。
class Club(ndb.Model):
parent = ndb.KeyProperty()
答案 1 :(得分:1)
您不能将祖先用作过滤器的一部分;它必须是query()调用上的关键字参数。目前,OR查询无论如何都会变成多个查询,因此OR()方法给您带来的唯一好处是更容易组合结果。但是为了工作你必须按键排序,并且编写一个小合并函数来合并按键排序的两组查询结果是微不足道的。 (也可以通过调用ndb.query._MultiQuery()来完成它,但后者不是一个记录的API,而且很难做到正确,所以最好自己这样做。)