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

PyQt6 QSQL加载SQLite3数据库仅显表头,如何显示数据?

PyQt6 QSqlTableModel仅显示表头不加载数据的解决方法

你的代码核心问题是未触发数据库查询操作,QSqlTableModel不会自动加载数据,必须显式调用方法执行查询。此外,将模型设为实例变量能避免潜在的内存回收问题,让代码更规范。

修改要点:

  • 在设置要显示的表后,调用model.select()执行数据查询
  • 将局部的model变量改为实例变量self.model,确保模型生命周期与窗口一致

修改后的完整代码:

import sys

from PyQt6 import QtWidgets
from PyQt6.QtSql import QSqlDatabase, QSqlTableModel
from PyQt6.QtWidgets import QDialog, QApplication, QMessageBox
from PyQt6.uic import loadUi


def createConnection() -> bool:
    con = QSqlDatabase.addDatabase('QSQLITE')
    con.setDatabaseName('data\\data.sqlite3')

    if not con.open():
        QMessageBox.critical(
            None,
            'QTableView Example - Error!',
            'Database Error: %s' % con.lastError().databaseText(),
        )
        return False
    return True


class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi('resources\\forms\\tabletutorial.ui', self)
        self.setWindowTitle('QTable Example')

        # 创建模型并设为实例变量
        self.model = QSqlTableModel(self)
        self.model.setTable('MOCK_STAFF_DATA')
        # 执行查询加载数据
        self.model.select()
        self.tableView.setModel(self.model)

        # 调整列宽适配内容
        self.tableView.resizeColumnsToContents()


def run():
    app = QApplication(sys.argv)
    if not createConnection():
        sys.exit(1)
    mainwindow = MainWindow()
    widget = QtWidgets.QStackedWidget()
    widget.addWidget(mainwindow)
    widget.setFixedHeight(1000)
    widget.setFixedWidth(1500)

    widget.show()

    try:
        sys.exit(app.exec())
    except:
        print('Exiting')


run()

关键说明:

QSqlTableModel的工作流程是:设置目标表 → 调用select()执行SELECT查询 → 将结果填充到模型 → 关联到QTableView显示。你之前的代码跳过了select()步骤,所以模型中没有数据,自然只显示表头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:15:45