python - 如何在 SQLAlchemy ORM 中同时过滤多列中的位置
问题描述
我有一个entities
包含name
和entity_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 上运行它。
解决方案
我认为您正在寻找类似的东西,您可以将其与一些变量名称更改一起使用:
from sqlalchemy import tuple_
session.query(Ent).filter(tuple_(Ent.name, Ent.type).in_(items))
笔记:
1.Item必须是元组列表
2.这适用于 PostgreSQL,但与 SQLite 不同。
如果您不允许使用tuple_
还有另一种方法。让我知道,我会更新我的答案。
推荐阅读
- java - Java swing keyPressed不起作用
- r - 使用 data.table 中的 rowid 提取范围
- docker - Docker 日志在 Ubuntu Linux Mint 中的位置
- c# - Liskov 替换原则 - 通用接口
- html - Flexbox: wrapper has original width, not resized one
- r - 在 (M)CA 之后对列(即变量)而不是行(即个体)执行 HCPC
- oracle11g - Oracle 错误:未声明存储过程参数值
- python - 如何在 Kivy、Python 中更新标签的文本
- google-maps - 比较 Google Maps V3 中的纬度/经度值
- php - PHP - 使用十六进制字符串解压模块