PyQt5的MySQL数据库驱动插件安装及使用
Qt5默认不安装MySQL数据库驱动,这给支持不同版本的MySQL数据库支持提供了灵活的支持,同时也提升了MySQL数据库使用的难度。本文将详细介绍如何安装MySQL数据库驱动插件及使用。
1、软件准备
在安装MySQL插件之前,需要准备如下软件:
-
MySQL数据库,本次实例使用的版本为8.0.28,该版本自带MySQL Connector C,因此不需要额外安装MySQL Connector C。
-
Visual Studio 2019 社区版本,Visual Studio 2019 需要安装 VC++功能模块
-
Qt框架:本次实例使用的Qt框架版本为5.15.2,并安装Qt框架源代码
-
Python开发环境:anaconda,Anaconda的Python版本为3.9.7
-
安装PyQt5及其相关组件:
pip install PyQt5==5.15.2 pyqtwebengine==5.15.2 pyqtdatavisualization==5.15.2 pyqtchart==5.15.2 pyqt3d==5.15.2 pyqt5-plugins==5.15.2.2.2 qscintilla==2.12.0
2、编译MySQL数据库驱动插件
第一步:打开Visual Studio 2019的命令行:X64 Native Tools Command Prompt for VS 2019
第二步:在命令中将目录定位到Qt安装目录下的sql驱动插件目录:
cd %QTDIR%\Src\qtbase\src\plugins\sqldrivers
本文的位置为:
C:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers
第三步:配置MySQL数据库驱动插件编译选项:
安装MySQL Connector C版本
qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/lib"
本次使用的命令行如下:
qmake -- MYSQL_INCDIR="C:\Program Files\MySQL\MySQL Server 8.0\include" MYSQL_LIBDIR="C:\Program Files\MySQL\MySQL Server 8.0\lib"
注意,qmake命令必须添加当前命令行环境
第四步:编译并安装MySQL数据库驱动插件
nmake sub-mysql
nmake install
编译并安装完成后,MySQL数据库插件自动安装到,Qt框架安装位置。这里的位置为:
C:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers
最后将红色方框中的4个文件复制到PyQt5的数据库插件文件夹中,在这里的位置为:
C:\Anaconda3\Lib\site-packages\PyQt5\Qt\plugins\sqldrivers
请根据自己的Anaconda安装查找。
第五步,将MySQL驱动支持DLL复制到Anaconda安装目录的根目录下:
注意,如果不复制这些文件到Anaconda的根目录或其他系统环境中,否则在后面的数据库连接将不会成功。
3、连接MySQL
完成前面的步骤,就可以正常使用MySQL数据库驱动插件了。
第一步,导入依赖库:
import sys
from PyQt5.QtSql import QSqlDatabase
第二步,查询当前数据库驱动插件
drivers = QSqlDatabase.drivers()
print(drivers)
在这里输出的结果如下:
[‘QSQLITE’, ‘QMARIADB’, ‘QMYSQL’, ‘QMYSQL3’, ‘QODBC’, ‘QODBC3’, ‘QPSQL’, ‘QPSQL7’]
从输出结果可以知道,QMYSQL
表示MySQL数据库驱动已经安装成功
第三步,连接数据库
# 加载MySQL数据库驱动
db = QSqlDatabase.addDatabase("QMYSQL")
# 设置数据库IP地址
db.setHostName('localhost')
# 设置数据库端口
db.setPort(3306)
# 请根据自己的数据库名称修改
db.setDatabaseName('数据库名称')
db.setUserName('MySQL数据库用户名')
db.setPassword('MySQL数据库用户登录密码')
# 连接并打开数据库
db.open()
if db.isOpen():
print("connected to mysql database")
else:
print("mysql connect failed:",db.lastError().text())
sys.exit()
# 关闭数据库
db.close()
在这里的输出如下: