You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含OR包裹AND分组条件的原生SQL转换为SQLAlchemy ORM语句

SQLAlchemy多AND分组OR查询实现方案

首先需要导入SQLAlchemy提供的逻辑运算符函数:

from sqlalchemy import or_, and_

标准实现写法

直接将每个独立的AND条件分组用and_()包裹,作为参数传入or_()中即可完全匹配你需要的原生SQL逻辑:

session.query(models.UpcomingThings).filter(
    or_(
        # 第一个AND分组,对应原生SQL第一组括号内的条件
        and_(
            models.UpcomingThings.Id == 'ES1234',
            models.UpcomingThings.Date == '2021-08-18',
            models.UpcomingThings.Period == 27
        ),
        # 第二个AND分组,对应原生SQL第二组括号内的条件
        and_(
            models.UpcomingThings.Id == 'ES0197',
            models.UpcomingThings.Date == '2021-08-18',
            models.UpcomingThings.Period == 29
        )
    )
).all()

批量多分组优化写法

如果后续需要匹配的组合条件更多,还可以用tuple_批量匹配,代码更简洁:

from sqlalchemy import tuple_

session.query(models.UpcomingThings).filter(
    tuple_(
        models.UpcomingThings.Id,
        models.UpcomingThings.Date,
        models.UpcomingThings.Period
    ).in_([
        ('ES1234', '2021-08-18', 27),
        ('ES0197', '2021-08-18', 29)
    ])
).all()

注意事项

如果Date字段在模型中定义为日期/时间类型,建议传入datetime.date(2021,8,18)类型对象而非字符串,避免不同数据库的日期格式适配问题。

内容的提问来源于stack exchange,提问作者AdrianC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:01