我在 pyqt 桌面应用程序中使用 sqlalchemy。当我执行并更新到数据库时,更改不会反映在数据库中,如果我检查会话对象“sqlalchemy.orm.scoping.ScopedSession”,它告诉我我的对象不存在于会话中,但如果我尝试添加它告诉我已经存在。我管理连接的方式如下,当应用程序启动时我打开一个连接并保持它打开所有用户会话,当应用程序关闭时我关闭连接。因此,所有查询都只打开一个连接。
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()
我检查了会话,有两个不同的对象(我不知道为什么)。
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)