解决PySide2/PyQt5连接mysql数据库出现的“QMYSQL driver not loaded”

  在使用PySide2/PyQt5连接mysql数据库时,经常会有人遇到“QMYSQL driver not loaded”的情况。解决这个问题我们得分情况处理:

  (1)PySide2/PyQt5版本≤5.12

  (2)PySide2/PyQt5版本>5.12

 (一)对应于第一种情况(PySide2/PyQt5版本≤5.12)

  测试代码如下:

 1 from PySide2.QtSql import QSqlDatabase
 2 from PySide2.QtCore import QCoreApplication
 3 
 4 app = QCoreApplication()
 5 db = QSqlDatabase.addDatabase('QMYSQL')
 6 db.setHostName('localhost')
 7 db.setUserName('test_user')
 8 db.setPassword('123456')
 9 db.setDatabaseName('world')
10 db.open()
11 print(db)

  在命令行运行该python脚本,错误信息如下:

   可以看到,在可用的驱动列表中是有"QMYSQL”的,出现此问题的原因是MYSQL驱动没有加载成功,只需要在本机mysql的安装位置找到libmysql.dll文件,例如本机路径为:“G:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.dll",并将此文件拷贝至上面脚本的同目录下,再次运行,信息如下:

   可以看到,已经成功连接到mysql数据库。

  (二)对应于第二种情况(PySide2/PyQt5版本>5.12)

  在命令行运行上面的测试代码,错误信息如下:

  注意,可用的驱动列表中没有QMYSQL,说明缺少驱动,打开PySide2目录\PySide2\plugins\sqldrivers,发现只有如下3个:

   这是因为,从PySide2 5.12之后,不再提供mysql的驱动,那么我们把5.12的驱动放到里面行不行呢,我们把5.12的”qsqlmysql.dll“放到5.15的sqldrivers文件夹下,同样的把libmysql.dll拷贝至脚本同一目录,运行脚本,提示如下:

   可以看到,版本不同,不兼容。

  所以,我们要么选择使用qt5.12,要么就需要自己编译5.15版本的mysql驱动(当然使用别人编译好的也行),将5.15的驱动文件放至\PySide2\plugins\sqldrivers下后,运行脚本

   可以看到,能够成功连接了。

  那么,怎样编译5.15的mysql驱动呢?

  首先,电脑上需要安装qt

  然后,使用Qt Creator打开目录“F:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro”项目

   根据本机mysql安装的实际位置添加上图中两行,然后进行build(切记,如果你是在windows下使用PySide2,那么编译器一定要选择msvc,不能使用mingw),编译成功后在../mysql/lib目录下就可以看到

  这个qsqlmysql.dll文件就是我们所需要的

 

 

 

  

 

posted @ 2023-07-25 18:25  hustmse0510  阅读(731)  评论(0)    收藏  举报