【问题标题】:SQLAlchemy: How to use an instance in SQLAlchemy after session.close()?SQLAlchemy:如何在 session.close() 之后使用 SQLAlchemy 中的实例?
【发布时间】:2014-01-28 15:35:03
【问题描述】:

我在 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 即可解决问题。

【问题讨论】:

标签: sqlalchemy


【解决方案1】:

您也可以尝试设置expire_on_commit=False,它会影响commit 调用,这可能意味着您不需要执行refresh(假设成本很高)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2013-06-05
    • 2019-06-01
    • 1970-01-01
    • 2010-12-19
    • 2016-05-17
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多