1、连接数据库代码
db = QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setPort(3306)
db.setDatabaseName('username')
db.setUserName('root')
db.setPassword('123456')
if db.open():
print("连接成功")
else:
print("连接失败")
将上面的数据库名字和密码换成自己的就行,如果这里直接打印出连接成功,那么下面可以不用看了,可以直接对数据库操作了
2、错误与解决办法
首先用下面这个代码打印下现在支持的数据库驱动
from PyQt5.QtSql import QSqlDatabase
print(QSqlDatabase.drivers())
如果是这样的
['QSQLITE', 'QMYSQL', 'QMYSQL3', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
,有'QMYSQL', 'QMYSQL3'
这两个驱动,直接往后看。
如果没有就是缺少了libmysql.dll这个文件,在你的D:\MySQL\lib
文件加下找到它,如下图一所示,然后复制到D:\anaconda\Lib\site-packages\PyQt5\Qt5\bin
(我用的是anaconda)文件夹下,如图2所示。然后不出意外就能加载出上面所说的驱动了。
图1
图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
先用下面的代码看下自己的PyQt5的版本,我开始用的是5.15.5一直有问题,后来看网上教程都是用的5.12.1就改用5.12.1了,所以建议可以换成5.12.1。出现上面的问题是缺少
qsqlmysql.dll
这个扩展,可以点两个扩展下载下载,如果实在不愿意也可以直接到最后下载。注意点:我的python是64位的,mysql也是64位的。将这个扩展放入D:\anaconda\Lib\site-packages\PyQt5\Qt5\plugins\sqldrivers
这个地方,如图3所示。
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QT_VERSION_STR
from PyQt5.Qt import PYQT_VERSION_STR
from sip import SIP_VERSION_STR
if __name__=='__main__':
import sys
app=QApplication(sys.argv)
print("Qt5 Version Number is: {0}".format(QT_VERSION_STR))
print("PyQt5 Version is: {}".format(PYQT_VERSION_STR))
print("Sip Version is: {}".format(SIP_VERSION_STR))
sys.exit(app.exec_())
图3
然后基本上到这边就能成功连接到mysql了(我看其它博客都是这么说的),但是唉,我的就不行。一直在反复的检查版本然后,卸载在装都是不行,也不报错,直到看到了这位老哥pyqt5 QMYSQL driver not loaded,在代码上加了这两句,就能成功运行了唉,流弊
老哥的解释是`根本原因是qt用的是c++的库,加载不到驱动。用python 加载dll 让python 在上下文中能读取到驱动
import ctypes
ctypes.windll.LoadLibrary('D:/MySQL/lib/libmysql.dll')
3、链接
链接:https://pan.baidu.com/s/13xwzRL1qsyQyNwUfpzMhIw
提取码:0dyp