5

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()をデタッチしようとしましたが、何もしませんでした。

ありがとう

編集

何が問題なのかわかりました。将来の参考のために、私は自分の質問に答えます。

close()ステートメントSQLAlchemyがインスタンスを更新しようとした後、オブジェクト属性にアクセスしようとすると、session.commit()はオブジェクトインスタンスを期限切れとして設定します。commit()の後にrefreshを呼び出すと、問題が解決します。

4

1 に答える 1

1

expire_on_commit=False通話に影響を与える設定を試すこともできますが、それcommitを行う必要がないことを意味する場合がありますrefresh(費用がかかると仮定して)。

于 2014-01-28T07:35:03.527 に答える