如何在过滤器查询sqlalchemy中动态“_or”
how to dynamic "_or" in filter query sqlalchemy
我是使用 scrape
和 sqlalchemy
的初学者,我发现此过滤器查询中存在问题。
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()
我是使用 scrape
和 sqlalchemy
的初学者,我发现此过滤器查询中存在问题。
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()