【问题标题】:How to filter where in multiple columns simultaneously in SQLAlchemy ORM [duplicate]如何在SQLAlchemy ORM中同时过滤多列中的位置[重复]
【发布时间】:2018-05-09 04:15:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python sql sqlalchemy


    【解决方案1】:

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

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

    注释:

    1.Item 必须是元组列表

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

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

    【讨论】:

    • 完美,谢谢!你知道这种类型的 SQL 表达式是否有一个公认的术语?我注意到它已被标记为重复,但我(显然是最后一个问的人!)不知道该怎么称呼它。
    • 作为记录,这在 SQLite 中无法运行的原因似乎不是由于 SQLAlchemy 限制,而是因为 SQLite 无法运行查询(您会收到 row value misused)。
    猜你喜欢
    • 2015-02-10
    • 2011-03-20
    • 2019-02-19
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多