父实例未绑定到会话;属性“account”的延迟加载操作无法继续

2024-09-25 04:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试执行以下操作时:

for line in blines:
    line.account = get_customer(line.AccountCode)

试图将值赋给line.account时出现错误:

DetachedInstanceError: Parent instance <SunLedgerA at 0x16eda4d0> is not bound to a       Session; lazy load operation of attribute 'account' cannot proceed

我做错什么了吗??


Tags: instanceinforget错误lineaccountcustomer
3条回答

当我过早地关闭查询会话(即,在会话关闭后有代码处理那些SQLAlchemy模型对象)时,我遇到了这种类型的DetachedInstanceError。因此,这是一条反复检查no session闭包的线索,直到您完全不需要与模型对象交互,即一些延迟加载的模型属性等

“分离”意味着您正在处理一个与Session无关的ORM对象。Session是关系数据库的网关,因此每当您引用映射对象上的属性时,ORM有时需要返回数据库以获取该属性的当前值。一般来说,您应该只处理“附加”对象-“分离”是用于缓存和在会话之间移动对象的临时状态。

请参阅Quickie Intro to Object States,然后可能还会阅读该文档的其余部分;)。

我对芹菜也有同样的问题。把lazy='subquery'添加到关系中解决了我的问题。

相关问题 更多 >