在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可以解决这个问题。