PyQt5连接MySQL报错:QMYSQL驱动未加载及应用实例缺失问题
解决PyQt5连接MySQL时驱动未加载的问题
嘿,我来帮你搞定这个头疼的问题!你遇到的是PyQt5连接MySQL时常见的驱动加载和初始化问题,咱们一步步拆解解决:
1. 先解决「QCoreApplication实例缺失」的问题
PyQt的数据库驱动加载依赖于QCoreApplication(或其子类如QApplication)的实例存在,你的代码里没有创建这个对象,所以首先要补上。修改后的代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql import sys # 必须先初始化QApplication,这是加载驱动的前提 app = QtWidgets.QApplication(sys.argv) # 初始化数据库连接 db = QtSql.QSqlDatabase.addDatabase('QMYSQL') db.setHostName('localhost') db.setDatabaseName('shopping') db.setUserName('root') db.setPassword('prova') # 尝试打开连接并输出结果 if db.open(): print("✅ 数据库连接成功!") else: print(f"❌ 连接失败:{db.lastError().text()}")
2. 解决「QMYSQL驱动未加载」的核心问题
这个问题通常是驱动文件缺失或兼容性问题导致的,按以下步骤排查:
步骤A:确认驱动文件存在
找到你的PyQt5安装目录,进入Lib\site-packages\PyQt5\Qt\plugins\sqldrivers文件夹,检查是否有qsqlmysql.dll文件。如果没有,说明你的PyQt5版本没有自带QMYSQL驱动,你可以:
- 重新下载包含完整驱动的PyQt5安装包(注意必须是x64版本,和你的Python、MySQL匹配)
- 或者跳过QtSql,直接用你已经安装的
mysql-connector-python来连接数据库(这可能更省心)
步骤B:确保MySQL的动态链接库能被加载
MySQL8.0的libmysql.dll文件需要被Python进程找到,你可以:
- 找到MySQL安装目录下的
lib\libmysql.dll文件 - 把它复制到Python安装目录的
DLLs文件夹(比如C:\Python34\DLLs) - 或者把MySQL的
lib目录添加到系统环境变量PATH中,然后重启你的MS-DOS提示符
步骤C:适配MySQL8.0的认证方式
MySQL8.0默认使用caching_sha2_password认证方式,但旧版本的QMYSQL驱动不支持这个,所以需要把root用户的认证方式改成旧的mysql_native_password:
打开MySQL命令行客户端,执行以下SQL语句:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'prova'; FLUSH PRIVILEGES;
3. 关于手册提到的MySQLdb模块
手册里说的MySQLdb是另一种Python连接MySQL的库,和你用的PyQt5 QtSql模块无关,所以不用安装它。你已经安装的mysql-connector-python是官方的替代方案,如果你不想折腾QtSql驱动,也可以直接用它来连接数据库,代码示例如下:
import mysql.connector try: conn = mysql.connector.connect( host='localhost', database='shopping', user='root', password='prova' ) if conn.is_connected(): print("✅ 数据库连接成功!") except mysql.connector.Error as e: print(f"❌ 连接失败:{e}") finally: if 'conn' in locals() and conn.is_connected(): conn.close()
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

