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

SQLAlchemy一对多查询:获取全量父表且子表筛选site_id=100的方法

解决方案

场景1:返回全部父表Policy记录(无匹配子表时sites属性为空)

这种场景下需要将子表过滤条件放在join的on子句中,避免过滤掉没有符合条件子表的父表数据:

from sqlalchemy import and_
from sqlalchemy.orm import contains_eager

# 注意:你现有代码中Site的外键定义存在问题,指向的表名和Policy实际表名不匹配
# 需将Site的policy_id外键修改为:ForeignKey("UmbrellaPolicy.id")
policies = session.query(Policy)\
    .outerjoin(Site, and_(Site.policy_id == Policy.id, Site.site_id == "100"))\
    .options(contains_eager(Policy.sites))\
    .all()

执行后遍历每个policy的sites属性,只会包含site_id为100的关联记录。

场景2:仅返回存在匹配子表的Policy记录

如果不需要保留无匹配子表的父表数据,可以直接用内连接加where过滤:

from sqlalchemy.orm import contains_eager

policies = session.query(Policy)\
    .join(Site)\
    .filter(Site.site_id == "100")\
    .options(contains_eager(Policy.sites))\
    .all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:07