首页 > 解决方案 > 如何在 SQLAlchemy ORM 中同时过滤多列中的位置

问题描述

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

SELECT *
FROM entities
WHERE (name, entity_type) IN (('abc', 'type1'), ('def', 'type2'))

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

session.query(Entity).filter(User.name.in_(['abc', 'def']))

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

标签: pythonsqlsqlalchemy

解决方案


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

from sqlalchemy import tuple_

   session.query(Ent).filter(tuple_(Ent.name, Ent.type).in_(items))

笔记:

1.Item必须是元组列表

2.这适用于 PostgreSQL,但与 SQLite 不同。

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


推荐阅读