SQLAlchemy:急切加载关系的关系的关系

pto*_*tou 8 python sqlalchemy eager-loading

我有这样的结构:

class User(DeclarativeBase):
   ...
   teamMemberships = orm.relationship("TeamXREF",backref="user",lazy = "dynamic")


class TeamXREF(DeclarativeBase):
   ...


class Team(DeclarativeBase):
   ...
   name=db.Column(String)
   teamMembers = orm.relationship("TeamXREF",backref="team",lazy = "dynamic")
Run Code Online (Sandbox Code Playgroud)

但是,我无法设法写入 1 个查询(我总是以循环和多个查询结束)来立即加载所有这些信息:

  • 用户.teamMemberships
  • 用户.teamMemberships.team
  • 用户.teamMemberships.team.teamMembers
  • user.teamMemberships.team.teamMembers.user

Ian*_*son 7

您可以尝试仅显式加载查询中的项目,而不是将其硬编码到关系中。像这样的东西:

from sqlalchemy.orm import joinedload
Session.query(User).options(joinedload('teamMemberships').joinedload('team').joinedload('teamMembers').joinedload('user'))
Run Code Online (Sandbox Code Playgroud)

http://docs.sqlalchemy.org/en/improve_toc/orm/loading_relationships.html#loading-along-paths