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)