1

使用ndb.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)) 

它成爲一個與過濾器:

查詢(KIND = '新聞',過濾器= AND(FilterNode( '源', '=' 'GRD'), FilterNode( '源', '=', 'IND')))

回答

1

當反覆應用過濾器那樣的,你要串聯的過濾器,每個過濾器過濾已過濾[R esults。

要過濾您的任何sources您可以使用IN。從the docs報價:

同樣,在操作

property IN [value1, value2, ...] 

這可能值的列表,測試會員資格,實現爲

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

所以你可以這樣做:

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

謝謝,我想你的意思是'Q = News.query(ndb.OR(News.source.IN(源)))' – Houman

+0

@Houman懷疑這一點,或者需要2個參數 –

+0

@Houman'IN'是實際上是作爲一系列'OR'來實現的(請參閱上面的引用!)。 – tx802