PyQt5连接mysql出现QSqlDatabase: QMYSQL driver not loaded问题。
1. 问题背景:
在使用TableView展示Mysql数据时,使用了QSqlTableModel模型。
因此首先需要用PyQt5自带模块QtSql,获取Mysql数据库的连接对象。
db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setPort(3306)
db.setDatabaseName('zhidaodata')
db.setUserName('root')
db.setPassword('123456')
2. 出现问题:
问题详细信息:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
3. 问题分析:
找了许多教程,大多是说缺失mysql驱动导致。
但还有另外的一个关键因素:
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
这一信息表示安装的PyQt5库,不支持“QMYSQL”导致。而不支持“QMYSQL”的根本原因是:最新版本的PyQt5没有“qsqlmysql.dll”
是的,这很坑,所以要注意查看以下路径目录:
C:\Python36\Lib\site-packages\PyQt5\Qt\plugins\sqldrivers
看是否存在“qsqlmysql.dll”,很明显安装的5.14.0版本的PyQt5缺失该文件:
4. 解决问题:
问题已经分析清楚,那就好办了。解决问题的步骤如下:
第1点: 安装好MySql后,进入到:
C:\Program Files\MySQL\MySQL Server 8.0\lib
具体根据你选择的安装路径而定,主要是找到文件“libmysql.dll”:
将该文件复制粘贴到PyQt5库的路径:
C:\Python36\Lib\site-packages\PyQt5\Qt\bin
第2点: 找到对应PyQt版本的“qsqlmysql.dll”,将其复制到:
C:\Python36\Lib\site-packages\PyQt5\Qt\plugins\sqldrivers
但有些坑的是,这个文件很难找。所以,只能pip老版本的PyQt5才能解决:
pip install PyQt5==5.12.1
只有这个版本,亲测后,才发现有“qsqlmysql.dll”文件。
那如果你更换到5.12.1版本后,依然没有这个dll,那就去这个链接吧
qsqlmysql.dll 5.12.1版本下载跳转
或者先卸载PyQt5后,再重新安装5.12.1版本:
pip uninstall PyQt5
pip install PyQt5==5.12.1