SQLAlchemy - 完全加载实例再分离
有没有办法在把一个用SQLAlchemy映射的实例(还有它相关的对象)从会话中分离之前,先把它完全加载出来?我想把它通过管道发送到另一个进程,但不想在那个新进程中再把它合并到会话里。
谢谢
Jan
1 个回答
2
我想你可能需要在查询中使用options()
方法,配合eagerload()
或eagerload_all()
。
这里有一个我们应用中的例子,类Controlled
有一个叫changes
的关系,它会引入一堆DocumentChange
记录,而这些记录又有一个关系dco
,每个实例会引入一个Dco
对象。这是一个两层的预加载,所以使用了eagerload_all()
。我们使用的是declarative
扩展(如果这有关系的话),而m.Session是一个“作用域”会话(线程本地会话)。
from sqlalchemy.orm import eagerload, eagerload_all
...
controlled_docs = (m.Session.query(m.Controlled)
.options(eagerload_all('changes.dco'))
.order_by('number')
.all())
如果这还不够,也许可以提供一段代码或文字,展示相关的ORM类是如何关联的,我可以更新答案,说明这些选项在你的情况下是如何使用的。