2015-04-17 45 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()