1

ndb.ORを使用する正しい方法は、このようなものです:OR-フィルタになりループでndb.ORを使用するには?

q = News.query(ndb.OR(News.source == 'GRD', News.source == 'IND')) 

クエリ(種類= 'ニュース'、フィルター= OR(FilterNode( 'ソース'、 '='、 'GRD')、 FilterNode( 'ソース'、 '='、 'IND')))

しかし、私はどのようにループでそれを行うのですか?

私はこのしようとすると:

q = News.query() 
for source in sources: 
    q = q.filter(ndb.OR(News.source == source)) 

をそれはAND-フィルタ次のようになります。

クエリ(種類= 'ニュース'、フィルター= AND(FilterNode( 'ソース'、 '=' 'GRD')、 FilterNode( 'ソース'、 '='、 'IND')))

答えて

1

あなたが繰り返しそのようなフィルタを適用するときは、各フィルタがすでにフィルタリングをフィルタリングして、フィルタを連鎖されていますrエスコート。

sourcesのいずれかでフィルタするには、INを使用できます。 the docsから引用:

同様

、IN動作が可能な値のリストのメンバーシップをテストする

property IN [value1, value2, ...] 

が、そう

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

として実装されていますあなたはできる:

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

おかげで、私は()ndb.OR(News.source.IN(ソース))あなたは 'Q = News.queryを意味だと思う' – Houman

+0

@Houmanはそれを疑う、OR –

+0

@Houman 'IN'がある2つのパラメータを必要とします実際には一連の 'OR'sとして実装されています(上の引用符を参照してください!)。 – tx802

関連する問題