如何在调用session.get方法时使用selectinload加载关联数据?
如何在session.get中预加载关联的phones数据?
要在使用session.get获取User实例的同时加载关联的phones数据,有两种常用方式:
方式一:给session.get传入options参数(推荐,按需加载)
session.get方法支持通过第三个参数options传入加载策略,直接指定selectinload(User.phones)即可实现需求:
from sqlalchemy.orm import selectinload # 获取User的同时,用selectinload预加载关联的phones user = session.get(User, user_id, options=[selectinload(User.phones)])
这种方式是按需加载,只会在这次特定的get请求中加载phones数据,不会影响其他查询,灵活性更高,还能避免N+1查询问题。
方式二:修改relationship的lazy属性(全局生效)
如果希望所有获取User的操作都自动加载phones,可以修改User模型中phones字段的lazy参数为"selectin":
phones: Mapped[list["Phone"]] = relationship(lazy="selectin")
这种方式是全局生效的,后续任何查询User的操作都会自动加载关联的phones数据,适合业务上固定需要关联数据的场景。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

