SQLAlchemy:如何在 session.close() 之后在 SQLAlchemy 中使用实例?

fdi*_*isk 5 sqlalchemy

我在 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
Run Code Online (Sandbox Code Playgroud)

它抛出一个 DetachedInstanceError。

我试图分离对象, expunge_all() 什么也没有。

谢谢

编辑

我发现了问题所在。为了将来参考,我将回答我自己的问题。

session.commit() 将对象实例设置为过期,当我尝试在 close() 语句 SQLAlchemy 尝试刷新实例后访问对象属性时。在 commit() 之后调用 refresh 解决了问题。

Eog*_*anM 2

expire_on_commit=False您还可以尝试影响呼叫的设置commit,这可能意味着您不需要执行此操作refresh(假设这很昂贵)。