我是使用scrape
和sqlalchemy
的初学者,我在此过滤查询中发现了一个问题。
data = ['foo','bar']
q_cat = self.session.query(Category).filter_by(_or(name=='foo',name=='bar')).all()
我的代码中的数据变量是动态的。如何在_or(...)
内使其动态化?
感谢。
答案 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()