使用ndb.OR的正确方法是这样的:
q = News.query(ndb.OR(News.source == 'GRD', News.source == 'IND'))
这导致OR过滤器。
查询(种类='新闻',过滤器= OR(过滤器节点('来源',' =',' GRD') , FilterNode(' source',' =',' IND')))
但我该怎么做呢?
当我尝试这个时:
q = News.query()
for source in sources:
q = q.filter(ndb.OR(News.source == source))
它成为AND过滤器:
查询(种类='新闻',过滤器= AND(过滤器节点('来源',' =',' GRD') , FilterNode(' source',' =',' IND')))
答案 0 :(得分:1)
当您反复应用此类过滤器时,您正在链接过滤器,每个过滤器都会过滤已过滤的结果。
要按sources
的任何一个进行过滤,您可以使用IN
。引自the docs:
同样,IN操作
property IN [value1, value2, ...]
用于测试可能值列表中的成员资格,实现为
(property == value1) OR (property == value2) OR ...
所以你可以这样做:
qry = News.query(News.source.IN(sources))