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

如何将QSqlTableModel与QTableView关联?附.db文件连接示例需求

QSqlTableModel与QTableView关联的完整实现示例

没问题,我帮你把QSqlTableModel和QTableView关联起来,下面是一个完整的可运行示例,直接就能连接本地的SQLite .db文件并在TableView里展示数据:

核心实现步骤

  • 初始化SQLite数据库连接,指定目标.db文件的路径
  • 创建QSqlTableModel实例,绑定数据库中的目标表并加载数据
  • 将模型与QTableView关联,同时可以添加一些优化显示的配置

完整可运行代码

from PyQt5 import QtWidgets, QtSql

class Main(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.setup_database()
        self.setup_table_model()

    def init_ui(self):
        layout = QtWidgets.QVBoxLayout()
        self.table = QtWidgets.QTableView()
        # 开启排序功能,点击表头可排序
        self.table.setSortingEnabled(True)
        # 让最后一列自适应窗口宽度
        self.table.horizontalHeader().setStretchLastSection(True)
        layout.addWidget(self.table)
        self.setLayout(layout)
        self.setWindowTitle("QSqlTableModel + QTableView 示例")

    def setup_database(self):
        # 初始化SQLite数据库连接
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        # 替换成你的.db文件路径,比如"./test.db"
        self.db.setDatabaseName("./test.db")
        
        # 检查数据库是否连接成功
        if not self.db.open():
            QtWidgets.QMessageBox.critical(
                self, "数据库连接失败",
                f"无法打开数据库:{self.db.lastError().text()}"
            )
            self.close()

    def setup_table_model(self):
        # 创建QSqlTableModel实例
        self.model = QtSql.QSqlTableModel(self, self.db)
        # 替换成你数据库中存在的表名,比如"users"
        self.model.setTable("users")
        # 设置编辑策略:这里设为OnFieldChange,即修改字段后立即同步到数据库
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
        # 加载表数据
        if not self.model.select():
            QtWidgets.QMessageBox.critical(
                self, "数据加载失败",
                f"无法加载表数据:{self.model.lastError().text()}"
            )
            return
        
        # 将模型与TableView关联
        self.table.setModel(self.model)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    main.resize(600, 600)
    main.show()
    sys.exit(app.exec_())

关键注意事项

  • 替换路径和表名:记得把代码中的"./test.db"换成你实际的.db文件路径,"users"换成数据库中存在的表名
  • 错误处理:代码里添加了数据库连接和数据加载的错误提示,方便排查问题
  • 编辑策略:setEditStrategy可以根据需求调整,比如OnManualSubmit需要手动提交修改,适合批量编辑场景
  • 视图优化:开启排序和自适应宽度能提升用户体验,你可以根据需要添加更多视图配置,比如隐藏指定列、调整列宽等

内容的提问来源于stack exchange,提问作者user13522091

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:27:59