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

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

问题描述:

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

In PostgreSQL, checking whether a field is in a given list is done using the IN operator:

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

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

What is the SQLAlchemy equivalent for an IN SQL query?

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

查询返回空.

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

这个查询返回了正确的结果,但不优雅且难以扩展.

This query returns the right result, but it is not elegant and hard to expand.

你可以这样做:

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