在PostgreSQL中,使用IN
运算符检查字段是否在给定列表中:
SELECT * FROM stars WHERE star_type IN ('Nova', 'Planet');
IN
SQL查询的SQLAlchemy等价物是什么?
in
db_session.query(Star).filter(Star.star_type in ('Nova', 'Planet'))
查询返回空。
or_
db_session.query(Star).\
filter(or_(
Star.star_type == 'Nova',
Star.star_type == 'Planet'
))
此查询返回正确的结果,但它不优雅且难以展开。
答案 0 :(得分:5)
你可以这样做:
db_session.query(Star).filter(Star.star_type.in_(['Nova', 'Planet']))
答案 1 :(得分:0)
解决此问题(在找到可接受的答案之前我曾成功使用过)的一种坏方法是使用列表理解:
db_session.query(Star).filter(
or_(*[Star.star_type == x for x in ['Nova', 'Planet'])
)