如何在 SQLAlchemy ORM 中同时过滤多列中的位置

Mik*_*nch 1 python sql sqlalchemy

我有一个entities包含nameentity_type列的表,并且想要查找多行测试这两个列的对。在普通的 SQL 中,我可以这样做:

SELECT *
FROM entities
WHERE (name, entity_type) IN (('abc', 'type1'), ('def', 'type2'))
Run Code Online (Sandbox Code Playgroud)

在 SQLAlchemy ORM 中,过滤 WHERE IN 单个列表很简单,例如:

session.query(Entity).filter(User.name.in_(['abc', 'def']))
Run Code Online (Sandbox Code Playgroud)

是否有与顶级 SQL 表达式等效的高效 SQLAlchemy?我不认为它特别相关,但就记录而言,我有兴趣针对 PostgreSQL 运行它。

Meh*_*far 7

我认为您正在寻找这样的东西,您可以将其与一些变量名称更改一起使用:

from sqlalchemy import tuple_

   session.query(Ent).filter(tuple_(Ent.name, Ent.type).in_(items))
Run Code Online (Sandbox Code Playgroud)

笔记:

1.Item 必须是元组列表

2.这适用于 PostgreSQL,但与 SQLite 中断。

如果您不允许使用,tuple_还有另一种方法。让我知道,我会更新我的答案。