PyQt5中QMYSQL驱动加载失败,MySQL映射QTableView求助
问题描述
尝试将MySQL数据库映射到QTableView时,出现以下错误:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
已按照指引将qsqlmysql.dll和libmysql.dll移至对应路径,但问题仍未解决。
环境信息:
- Python 3.9.13 64位
- Windows 10
- PyQt 5.15.4
相关代码如下:
from mysql.connector import connect, Error from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtSql import QSqlDatabase, QSqlTableModel from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView class Ui_self(QMainWindow): connection = connect(host="", user='', password='', database="", charset='utf8') def __init__(self): super().__init__() self.setWindowTitle("MySQL Table View") self.resize(800, 600) db = QSqlDatabase.addDatabase("QMYSQL") db.setHostName("") db.setDatabaseName("") db.setUserName('') db.setPassword('') db.open() self.setupUi() self.show() def setupUi(self): self.setObjectName("MainWindow") self.resize(800, 600) self.centralwidget = QtWidgets.QWidget(self) self.centralwidget.setObjectName("centralwidget") self.model = QSqlTableModel() self.model.setTable('students') self.model.setEditStrategy(QSqlTableModel.OnFieldChange) self.model.select() self.tableView = QtWidgets.QTableView(self.centralwidget) self.tableView.setGeometry(QtCore.QRect(0, 0, 801, 561)) self.tableView.setObjectName("tableView") self.tableView.setModel(self.model) self.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(self) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") self.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) def retranslateUi(self): _translate = QtCore.QCoreApplication.translate self.setWindowTitle(_translate("MainWindow", "MainWindow")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) ui = Ui_self() sys.exit(app.exec_())
解决方案
1. 确认DLL版本匹配
- 确保
libmysql.dll是64位版本,且与MySQL服务器版本兼容(PyQt 5.15.4的QMYSQL驱动适配MySQL 8.0及以上版本)。 - 确认
qsqlmysql.dll来自PyQt5的安装目录(如Lib\site-packages\PyQt5\Qt\plugins\sqldrivers),避免混用其他版本驱动。
2. 修正DLL放置路径
- 将
libmysql.dll放到Python根目录(如C:\Python39)或系统System32目录(C:\Windows\System32)。 - 确保
qsqlmysql.dll在PyQt5的sqldrivers插件目录,若Qt未识别该路径,手动添加:from PyQt5.QtCore import QCoreApplication QCoreApplication.addLibraryPath("你的PyQt5插件路径,比如Lib/site-packages/PyQt5/Qt/plugins")
3. 修复代码问题
- 移除类级别的
connection变量,避免mysql.connector与QSqlDatabase资源冲突。 - 添加连接错误捕获,方便排查:
if not db.open(): print(db.lastError().text()) - 将
QSqlTableModel与已打开的数据库关联:self.model = QSqlTableModel(db=db)
4. 检查依赖缺失
用Dependency Walker工具打开qsqlmysql.dll,查看是否存在缺失的依赖项(如Qt相关DLL),补充对应文件即可。
内容的提问来源于stack exchange,提问作者KsOnd
相关产品推荐
相关产品推荐

