PyQt5:SQLite后端数据更新后如何刷新QTableView数据
刷新QTableView展示的SQLite数据(PyQt5)
嘿,这个问题我太熟了!你用的QSqlQueryModel是基于查询结果的快照模型,它不会自动监听数据库的变化,所以当后端SQLite数据修改后,得手动让模型重新拉取数据来刷新视图。这里有两种简单靠谱的实现方式:
方法一:直接重新执行查询
你可以封装一个刷新方法,每次数据库修改完成后调用它就行:
# 在你的类里添加这个方法 def refresh_table(self): # 重新执行原查询,记得传入数据库连接对象 self.projectModel.setQuery("select * from ledgerstats", self.db) # 可选:自动调整列宽适配内容,提升显示效果 self.tableView.resizeColumnsToContents()
比如当你在后端修改完数据库后,直接调用self.refresh_table(),QTableView就会自动更新成最新的数据了。
方法二:复用查询语句(更简洁)
如果不想重复写SQL语句,可以把查询字符串提前存成类变量,刷新时直接复用:
# 初始化模型的时候 self.query_sql = "select * from ledgerstats" self.projectModel = QSqlQueryModel() self.projectModel.setQuery(self.query_sql, self.db) self.tableView.setModel(self.projectModel) # 刷新方法 def refresh_table(self): self.projectModel.setQuery(self.query_sql, self.db) self.tableView.resizeColumnsToContents()
额外提示
- 如果数据库是被外部程序修改的,你可以用
QTimer设置定时刷新,比如每隔3秒自动拉取一次最新数据:from PyQt5.QtCore import QTimer # 初始化时设置定时器 self.refresh_timer = QTimer(self) self.refresh_timer.timeout.connect(self.refresh_table) self.refresh_timer.start(3000) # 3000毫秒=3秒 - 如果是你自己的代码修改数据库,记得在修改操作(比如
INSERT/UPDATE/DELETE)执行完成后,立刻调用刷新方法,这样用户能马上看到变化。
内容的提问来源于stack exchange,提问作者Vaas
相关产品推荐
相关产品推荐

