如何在过滤器查询sqlalchemy中动态“_or”

时间:2015-04-17 13:57:45

标签: python sqlalchemy scrapy

我是使用scrapesqlalchemy的初学者,我在此过滤查询中发现了一个问题。

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

我的代码中的数据变量是动态的。如何在_or(...)内使其动态化?

感谢。

2 个答案:

答案 0 :(得分:2)

您似乎希望搜索该类别是否属于任何数据元素。在这种情况下,最好使用in_。这是一个例子。

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

这将为您提供data中包含名称的所有类别的列表。

答案 1 :(得分:1)

如果您只是执行所有等于操作,那么 _运算符中的将是最佳使用。

但是,如果您确实要显式地使用或_ 和_ 运算符,则两者都采用任意数量的子句。

如果您的数据列表长度不同,您可以创建将用于或_ 的逻辑子句的新列表,例如:

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