繁体   English   中英

SQLAlchemy渴望通过关系加载

[英]SQLAlchemy Eager Loading with Relationships

在以下情况下尝试(失败)将我的头放在如何使用SQLAlchemy上:

假设我有一个数据库,例如:

A has a (one -> many) relationship to B

B has a (one -> many) relation to C

如果要遍历给定A的所有B,则可以执行以下操作:

for b in a.bs:
    print "hello"

如果要遍历所有间接属于A的C,可以执行以下操作:

for b in a.bs:
    for c in b.cs:
        print "hello"

但是,我知道最外层循环的每次迭代都将执行新的SQL查询。

我的理解是,我可以通过执行以下操作使用subqueryload来防止这种情况的发生:

for b in session.query( b ).options( subqueryload( B.c ) ).filter_by( B.a_id == a.id ):
    for c in b.cs:
        print "hello"

这是最简洁的方法吗?

有没有让我从实际的“ a”对象开始的语法? 也许像这样:

for b in a.bs.options( subqueryload( B.c ) ):
    ...

预先非常感谢您的帮助

您可以像这样subqueryload任意连接路径:

session.query(A).options(subqueryload(A.b).subqueryload(B.c))

这将使用三个查询和将加载Ab ,和Bc为每BAb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM