我在session.close()之后使用SQLAlchemy中的实例时遇到问题。
这是代码:
session = sqlalchemy.orm.sessionmaker(bind=engine)
object = session.query(Entity).filter(Entity.id == id).one()
object.name = "Foo"
session.commit()
session.close()
print object.name
它抛出一个 DetachedInstanceError。
我试图分离对象,expunge_all()和任何东西。
谢谢
编辑
我发现了问题所在。为了将来参考,我将回答我自己的问题。
session.commit() 将对象实例设置为过期,当我尝试在 close() 语句 SQLAlchemy 尝试刷新实例之后访问对象属性时。在 commit() 之后调用刷新可以解决这个问题。
您也可以
尝试影响commit
调用的设置expire_on_commit=False
,这可能意味着您不需要执行refresh
(假设成本很高)。