SQLAlchemy:Check是列表中的给定值

时间:2015-06-10 11:17:56

标签: python sql postgresql sqlalchemy

问题

在PostgreSQL中,使用IN运算符检查字段是否在给定列表中:

SELECT * FROM stars WHERE star_type IN ('Nova', 'Planet');

IN SQL查询的SQLAlchemy等价物是什么?

我尝试了什么

Python的in

db_session.query(Star).filter(Star.star_type in ('Nova', 'Planet'))

查询返回空。

SQLAlchemy的or_

db_session.query(Star).\
           filter(or_(
                      Star.star_type == 'Nova', 
                      Star.star_type == 'Planet'
           ))

此查询返回正确的结果,但它不优雅且难以展开。

2 个答案:

答案 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'])
    )