29

在尝试执行以下操作时:

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

难道我做错了什么??

4

4 回答 4

28

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

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

于 2012-12-23T17:06:23.447 回答
11

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

于 2016-03-04T02:54:22.447 回答
4

我在过早关闭查询会话时遇到了这种情况DetachedInstanceError(也就是说,在会话关闭后有代码来处理那些 SQLAlchemy 模型对象)。所以这是一个线索来仔细检查没有会话关闭,直到你绝对不需要与模型对象交互,即一些延迟加载的模型属性等。

于 2016-12-02T16:52:54.683 回答
2

我在单元测试时遇到了同样的问题。

解决方案是在“with”上下文中调用所有内容:

with self.app.test_client() as c:
    res = c.post('my_url/test', data=XYZ, content_type='application/json')

然后它起作用了。

添加惰性属性对我不起作用。

于 2019-08-09T08:31:22.427 回答