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

如何在SQLAlchemy中为查询追加子查询作为OR条件?

问题

现有子查询代码:

sub_query = db.query(Table1.id).filter(Table1.id.in_(db.query(Table2.ref_col).filter(Table2.col1 == 'value')))

基础查询代码:

query = db.query(Table1).filter(Table1.col1 == 'value1' | Table1.col2 == 'value2')

需要将该子查询作为OR条件追加到基础查询的WHERE子句中,生成如下SQL:

SELECT * From Table1 where Table1.col1 = 'value1' or Table1.col2 = 'value2' or Table1.id in (select Table2.ref_id from Table2 where Table2.col1 = 'value')

要求不能用子查询初始化查询,必须通过ORM方式在已有的基础查询上追加该子查询条件。

解决方案

首先纠正一个误区:你原定义的sub_query是冗余的,Table1.id.in_(...)本身就是一个可直接用于WHERE子句的布尔条件,不需要外层的db.query()包裹。

直接在基础查询上追加OR条件即可,有两种写法:

写法一:使用位运算符|

# 定义子查询条件
sub_condition = Table1.id.in_(db.query(Table2.ref_col).filter(Table2.col1 == 'value'))
# 追加到基础查询
query = query.filter(Table1.col1 == 'value1' | Table1.col2 == 'value2' | sub_condition)

写法二:使用or_()函数(更清晰,推荐)

先导入or_函数:

from sqlalchemy import or_

然后追加条件:

sub_condition = Table1.id.in_(db.query(Table2.ref_col).filter(Table2.col1 == 'value'))
query = query.filter(or_(
    Table1.col1 == 'value1',
    Table1.col2 == 'value2',
    sub_condition
))

两种写法都会生成你需要的目标SQL,完全符合“在已有的基础查询上通过ORM方式追加子查询条件”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:13:21