Dra*_*mon 4 sqlalchemy eager-loading
例如(eagerload / joinedload做同样的事情):
session = Session()
parents = session.query(Parent).options(joinedload(Parent.children)).all()
session.close()
print parents[0].children # This works
print parents[0].children[0].parent # This gives a lazy loading error
Run Code Online (Sandbox Code Playgroud)
在关闭会话之前可以添加以下循环(并且不会影响数据库):
for p in parents:
for c in p.children:
c.parent
Run Code Online (Sandbox Code Playgroud)
真是愚蠢。有没有一种方法可以更改原始查询,以便在不增加输出SQL中添加更多联接的情况下加载关系的两端?
更新(如果相关);这是映射
class Parent(Entity):
__tablename__ = "parent"
id = Column(Integer, primary_key=True)
children = relation("Child", backref="parent")
class Child(Entity):
__tablename__ = "child"
id = Column(Integer, primary_key=True)
parentId = Column(Integer, ForeignKey("parent.id"), index=True)
Run Code Online (Sandbox Code Playgroud)
那就是contains_eager()选择的目的。请尝试以下操作:
parents = session.query(Parent).options(joinedload(Parent.children),
contains_eager('children.parent')).all()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |