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

6

在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()之后调用refresh可以解决这个问题。


这也可能有所帮助:https://dev59.com/GWsy5IYBdhLWcg3w4x_c#25694346 - kolypto
1个回答

2
你也可以尝试使用设置expire_on_commit=False,它会影响commit调用,这可能意味着你不需要执行refresh(假设这很耗费资源)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接