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
相关产品推荐
相关产品推荐

