gpt4 book ai didi

急切加载时,SQLAlchemy 仅加载集合,而不加载 backref

转载 作者:行者123 更新时间:2023-12-01 00:00:15 25 4
gpt4 key购买 nike

例如(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

在关闭 session 之前添加以下循环有效(并且不会命中数据库):
for p in parents:
for c in p.children:
c.parent

这很愚蠢。有没有办法改变原始查询,以便它加载关系的双方而不在输出 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)

最佳答案

就是这样 contains_eager() 选项是为了。请尝试以下操作:

parents = session.query(Parent).options(joinedload(Parent.children),
contains_eager('children.parent')).all()

关于急切加载时,SQLAlchemy 仅加载集合,而不加载 backref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com