You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5工作线程无法连接MySQL数据库问题求助

解决PyQt5工作线程中MySQL驱动加载失败的问题

看起来你踩了PyQt5连接MySQL的几个常见坑,虽然驱动列表显示QMYSQL可用,但实际底层依赖没加载,再加上代码里的小错误,导致连接失败。我帮你一步步排查:

1. 先修正代码里的明显错误

你的代码里setHostName传的是数字192.168.56.1,但这个方法需要字符串类型的IP地址,直接写数字会导致参数错误,这可能是连接失败的原因之一。赶紧改成:

self.db.setHostName('192.168.56.1')

2. 把数据库连接逻辑移到run()方法里

QThread的__init__方法是在主线程执行的,哪怕你后续启动子线程,数据库对象的初始化还是在主线程环境中,这可能和PyQt5的线程安全机制冲突。正确的做法是把数据库连接的代码放到run()方法里——这才是子线程的真正执行入口:

class Worker(QThread):
    def __init__(self):
        super(Worker, self).__init__()
        self.db = None
        self.query = None

    def run(self):
        print('Opening DB in worker thread')
        # 传入唯一标识避免多线程驱动冲突
        self.db = QtSql.QSqlDatabase.addDatabase("QMYSQL", "worker_db")
        print('Driver available? ', self.db.isDriverAvailable("QMYSQL"))
        
        self.db.setHostName('192.168.56.1')
        self.db.setDatabaseName('Automation_DB')
        self.db.setUserName('root')
        self.db.setPassword('root')
        
        if self.db.open():
            print('DB opened successfully!')
            self.query = QSqlQuery(self.db)
            # 在这里执行你的数据库操作
        else:
            print('Failed to open DB')
            print('Last Error ', self.db.lastError().text())
            print('Drivers ', self.db.drivers())

3. 解决「Driver not loaded」的核心问题

PyQt5的QMYSQL驱动本身只是一个封装,它依赖MySQL的底层动态链接库libmysql.dll(Windows下),这个文件不会随PyQt5自动安装。你需要手动处理:

  • 找到你Windows系统上安装的MySQL目录(比如C:\Program Files\MySQL\MySQL Server 8.0\lib),复制里面的libmysql.dll
  • 把这个文件放到PyQt5的Qt5/bin目录下(通常在Python的site-packages里,比如Lib\site-packages\PyQt5\Qt5\bin),或者直接加到系统的PATH环境变量中

⚠️ 注意:必须保证libmysql.dll的位数和你的Python/PyQt5一致——如果是64位Python,就用64位MySQL的libmysql.dll,32位同理,否则会加载失败。

4. 最后再确认MySQL的远程配置

虽然你说命令行能连接,但还是再检查一下Ubuntu上的MySQL配置:

  • 打开/etc/mysql/mysql.conf.d/mysqld.cnf,确保bind-address设置为0.0.0.0(允许所有IP连接)
  • 确认Ubuntu的防火墙开放了3306端口(可以用ufw allow 3306临时测试)

按照这几步改完,应该就能解决连接问题了。

内容的提问来源于stack exchange,提问作者MikG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:12