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

Pony ORM对象转换为dict时如何保留外键关联数据?

解决方案

你使用的是Pony ORM框架,关联字段默认是懒加载机制,未主动访问时不会自动加载到查询结果中,直接对查询结果切片只能获取实体本身的基础字段,不会包含关联集合数据。可以按以下两种方式实现:

方法1:手动加载关联字段并拼接字典

这种方式灵活度最高,可以自定义关联字段的返回内容:

from pony.orm import db_session

with db_session:
    people = Person.select(lambda p: p.name == 'Jaewon')
    res = []
    for person in people:
        # 转换基础字段为字典
        person_dict = person.to_dict()
        # 手动加载cars关联集合并转为字典列表
        person_dict['cars'] = [car.to_dict() for car in person.cars]
        res.append(person_dict)

方法2:使用to_dict内置参数自动加载关联

Pony的to_dict方法支持related参数直接指定需要加载的关联字段,无需手动拼接,还可以搭配prefetch预加载关联避免N+1查询问题,提升性能:

from pony.orm import db_session, select

with db_session:
    # 预加载cars关联数据
    people = select(p for p in Person if p.name == 'Jaewon').prefetch(Person.cars)
    # 指定related参数自动加载cars关联
    res = [p.to_dict(related=['cars']) for p in people]

如果需要加载更深层级的关联数据,可以添加max_depth参数指定嵌套深度,比如to_dict(related=['cars'], max_depth=2)会自动加载Car实体下的关联字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:04