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

how to dynamic "_or" in filter query sqlalchemy

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

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

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

谢谢。

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

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

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

如果您只是简单地执行所有 equals 操作,那么 in_ 运算符将是最好的选择。

但是,如果您确实想要显式地使用 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()