我是使用scrape
和sqlalchemy
的初学者,我在此过滤器查询中发现了一个问题。如何在过滤器查询中动态“_or”sqlalchemy
data = ['foo','bar']
q_cat = self.session.query(Category).filter_by(_or(name=='foo',name=='bar')).all()
我的代码中的数据变量是动态的。如何使其在_or(...)
内动态变化?
谢谢。
我是使用scrape
和sqlalchemy
的初学者,我在此过滤器查询中发现了一个问题。如何在过滤器查询中动态“_or”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
中的所有类别的列表。
如果你只是在做所有等于操作,然后再在 _操作将是最好的使用。
但是,如果你真的想在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()
我的问题:数据变量是动态。 :)。我只是举例这个代码 – VoTue
我不明白你的问题,为什么不只是'data [0]'。只需使用列表的索引即可。 –
@VoTue我认为我的编辑解决了您的问题。 –