【发布时间】:2014-10-13 22:47:45
【问题描述】:
我有一个 ORM 关系的树结构,它(比方说)4 级深。默认情况下,它们不会预先加载。我处于需要获取树的“副本”的情况。所以我有类似的东西:
root = my_obj
for rel1 in root.some_relationship:
for rel2 in rel1.some_other_relationship:
... etc ...
所以,很明显,这是经典的“必须去数据库加载每个关系”的问题,而且需要很长时间。我知道我可以执行实际查询以使用 subqueryload (http://docs.sqlalchemy.org/en/rel_0_9/orm/loading.html#sqlalchemy.orm.subqueryload) 加载 root.some_relationship 中的对象,但如果我已经拥有 root.some_relationship 的句柄,我可以告诉该对象急切加载子关系列表吗?
root.some_relationship.eagerload('some_other_relationship.yet_another_rel')
将是我正在尝试做的伪代码。
如果没有,则查询已加载对象及其关系的查询,如下所示:
obj = session.query(root.some_rel_fk_id).subqueryload(....)
是最好的方式,那就太酷了。
非常感谢您的帮助!
【问题讨论】:
标签: python orm sqlalchemy flask-sqlalchemy