如何在循环中使用ndb.OR?

时间:2016-04-28 19:46:41

标签: python google-app-engine google-cloud-datastore app-engine-ndb

使用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')))

1 个答案:

答案 0 :(得分:1)

当您反复应用此类过滤器时,您正在链接过滤器,每个过滤器都会过滤已过滤的结果。

要按sources的任何一个进行过滤,您可以使用IN。引自the docs

  

同样,IN操作

property IN [value1, value2, ...]
  

用于测试可能值列表中的成员资格,实现为

(property == value1) OR (property == value2) OR ...

所以你可以这样做:

qry = News.query(News.source.IN(sources))