Python SQLAlchemy:检查给定值是否在列表中 问题

Python SQLAlchemy:检查给定值是否在列表中 问题,python,sql,postgresql,sqlalchemy,Python,Sql,Postgresql,Sqlalchemy,在PostgreSQL中,使用In操作符检查字段是否在给定列表中: SELECT * FROM stars WHERE star_type IN ('Nova', 'Planet'); SQL查询中的SQLAlchemy等价于什么? 我试过什么 Python在 查询返回空 SQLAlchemy的或 此查询返回正确的结果,但它并不优雅,也不难扩展。您可以这样做: db_session.query(Star).filter(Star.star_type.in_(['Nova', 'Planet']

在PostgreSQL中,使用
In
操作符检查字段是否在给定列表中:

SELECT * FROM stars WHERE star_type IN ('Nova', 'Planet');
SQL查询中
的SQLAlchemy等价于什么?

我试过什么 Python在 查询返回空

SQLAlchemy的

此查询返回正确的结果,但它并不优雅,也不难扩展。

您可以这样做:

db_session.query(Star).filter(Star.star_type.in_(['Nova', 'Planet']))

解决这个问题的一个糟糕方法(在找到公认答案之前我成功地使用了这个方法)是使用列表理解:

db_session.query(Star).filter(
    or_(*[Star.star_type == x for x in ['Nova', 'Planet'])
    )
db_session.query(Star).filter(Star.star_type.in_(['Nova', 'Planet']))
db_session.query(Star).filter(
    or_(*[Star.star_type == x for x in ['Nova', 'Planet'])
    )