2015-04-17 46 views
1

我是使用scrapesqlalchemy的初學者,我在此過濾器查詢中發現了一個問題。如何在過濾器查詢中動態「_or」sqlalchemy

data = ['foo','bar'] 
q_cat = self.session.query(Category).filter_by(_or(name=='foo',name=='bar')).all() 

我的代碼中的數據變量是動態的。如何使其在_or(...)內動態變化?

謝謝。

回答

2

看來您希望搜索該類別是否屬於任何數據元素。在這種情況下,最好使用in_。這是一個例子。

Category.query.filter(Category.name.in_(data))  

這會給你一個名字在data中的所有類別的列表。

+0

我的問題:數據變量是動態。 :)。我只是舉例這個代碼 – VoTue

+0

我不明白你的問題,爲什麼不只是'data [0]'。只需使用列表的索引即可。 –

+0

@VoTue我認爲我的編輯解決了您的問題。 –

1

如果你只是在做所有等於操作,然後再 _操作將是最好的使用。

但是,如果你真的想在or_and_運營商明確,無論採取條款任意數量。

如果你的數據列表的長度可以變化,您可以創建將用於or_的邏輯子句的一個新的列表,像:

data = ['foo','bar'] 
data_comparisons = [Category.name == field for field in data] 
q_cat = self.session.query(Category).filter_by(*data_comparisons).all()