一:背景
最近研究一个项目,里面用的Pyqt5编写的桌面应用,跑了下源码发现连接数据库那块出来问题,最终调试发现里面用的QtSql去连接mysql提示驱动找不到。
具体报错信息如下:
Could not parse stylesheet of object QTableView(0x2075e3bee20)
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
Driver not loaded Driver not loaded
二:原因分析
这里应该是缺少QMYSQL这个驱动,网上找了很多资料说是QT5.15.*版本的包里面没有这个驱动,需要自己下载源码包重新编译生成dll文件,最后尝试着下载了QT的整个源码包,按照网上的方法尝试了,最后还是提示这个驱动找不到。无奈只好寻求其他解决方案。
三:解决方案
(一)使用通用的odbc驱动来连接MySQL,我本地是windows环境需要下载mysql-connector-odbc,我是用的mysql8.0下载如下的驱动,连接如下
https://cdn.mysql.com//Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.35-win32.msi
下载完就一步一步的安装成功即可。
(二)配置
安装后,在管理工具选择odbc数据源,
填写数据库账号密码,数据库名称,测试连接如下:
这样就连接成功了
(三)QT代码连接
db = QtSql.QSqlDatabase.addDatabase('QODBC')
db.setDatabaseName("mysql")
db.setHostName('localhost')
db.setUserName('root')
db.setPassword('root')
if not db.open(): # 判断数据库是否打开
print(db.lastError().text()) # 打印操作数据库时出现的错误
return False
else:
print("连接成功")
运行代码发现连接成功了。是不是很简单,所以条条道路通罗马,技术上遇到问题,可能一种方法长时间解决不了或者解决起来很复杂,可以换一种思路,也许很快就解决了。