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
相关产品推荐
相关产品推荐

