我在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()之后调用刷新解决了问题。
答案 0 :(得分:1)
您还可以尝试设置expire_on_commit=False
,这会影响commit
来电,可能意味着您不需要执行refresh
(假设费用很高)。