我正在使用autocommit=True
和expire_on_commit=False
的会话。我使用会话来获取带有指向对象A
的外键的对象B
。然后我拨打session.expunge(a.b); session.expunge(a)
。
稍后,当尝试读取b.some_datetime
的值时,SQLAlchemy会引发DetachedInstanceError
。没有为延迟加载配置任何属性。错误是随机发生的。
这怎么可能?我假设在对象被清除后,所有标量属性都会被急切地加载并可用。
对于它的价值,对象被清除,以便在与数据库的所有交互结束后,它们可以在另一个线程中使用。
答案 0 :(得分:1)
其中一个映射类的字段具有onupdate
属性,导致它在对象更改时到期。
解决方法是在刷新和session.refresh(myobj)
的调用之间调用session.expunge()
。