1

La bonne façon d'utiliser un ndb.OR est comme ceci:Comment utiliser ndb.OR dans une boucle?

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

qui se traduit par un OU-filtre.

requête (type = 'Nouvelles', filtres = OR (FilterNode ('source', '=', 'drachmes'), FilterNode ('source', '=', 'IND')))

Mais comment faire cela en boucle?

Quand j'essaie ceci:

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

Il devient un ET-filtre:

requête (type = 'Nouvelles', filtres = ET (FilterNode ('source', '=' «GRD), FilterNode ('source', '=', 'IND')))

Répondre

1

Lorsque vous appliquez plusieurs fois les filtres comme cela, vous enchaînez les filtres, chaque filtre filtrant le déjà filtré r des résultats. Pour filtrer par l'un de vos sources, vous pouvez utiliser IN. Je cite the docs:

De même, l'opération

property IN [value1, value2, ...] 

qui teste l'appartenance à une liste de valeurs possibles, est mis en œuvre comme

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

Alors vous pourriez faire:

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

Merci, je pense que vous vouliez dire 'q = News.query (ndb.OR (News.source.IN (sources)))' – Houman

+0

@Houman doute, ou besoin de 2 paramètres –

+0

@Houman 'IN' est effectivement mis en œuvre comme une série de «OR» (voir citation ci-dessus!). – tx802