Qt5默認不安裝MySQL數據庫驅動,這給支持不同版本的MySQL數據庫支持提供了靈活的支持,同時也提升了MySQL數據庫使用的難度。本文將詳細介紹如何安裝MySQL數據庫驅動插件及使用。
在安裝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
第一步:打開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的根目錄或其他系統環境中,否則在後面的數據庫連接將不會成功。
完成前面的步驟,就可以正常使用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()
在這裡的輸出如下: