You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:28