0

pyqt デスクトップ アプリケーションで sqlalchemy を使用しています。データベースを実行して更新すると、変更がデータベースに反映されません。セッション オブジェクト 'sqlalchemy.orm.scoping.ScopedSession' を調べると、オブジェクトがセッションに存在しないことがわかりますが、試してみるとto added それはすでに存在していることを教えてくれます。接続を管理する方法は次のとおりです。アプリケーションの起動時に接続を開き、すべてのユーザーセッションを開いたままにし、アプリケーションを閉じると接続を閉じます。したがって、すべてのクエリは 1 つの接続のみを開いて実行されます。

selected_mine = Mine.query.filter_by(mine_name="some_name").first()
''' updating the object attributes '''
selected_mine.region = self.ui.region.text() 
self.sqlite_model.conn.commit()

セッションを調べたところ、2 つの異なるオブジェクトがあります (理由はわかりません)。

s=self.sqlite_model.conn()
>>> s
<sqlalchemy.orm.session.Session object at 0x30fb210>
s.object_session(selected_mine)
>>> <sqlalchemy.orm.session.Session object at 0x30547d0>

どうすればこれを解決できますか? なぜコミットが機能しないのですか?

クラスSqliteModel(オブジェクトself.sqlite_modelのクラス)でセッションを作成しています

Session = scoped_session(sessionmaker(autocommit=False, bind=self.engine))
self.conn = Session()

Base.query = Session.query_property()        

''' connect to database '''
Base.metadata.create_all(bind=self.engine)
4

1 に答える 1