PyQt5 QMYSQL 驱动程序未加载

Posted

技术标签:

【中文标题】PyQt5 QMYSQL 驱动程序未加载【英文标题】:PyQt5 QMYSQL Driver not loaded 【发布时间】:2019-07-12 11:50:55 【问题描述】:

我知道这个问题有很多关于 SO 的问题和答案,但对我没有任何帮助。

我安装了最新的QT Creator 4.9.2Qt 5.13.0 MinGW 32-BitmysqlServer 5.5 来编译QMYSQL 驱动程序。我不过是sqldrivers文件夹中的驱动和bin文件夹中的libmysql.dll

如果我使用 C++ 连接到数据库,一切正常,但我不使用 python。

另外我安装了一个新的 Python 3.7 32 位:

PyQt5:pip install pyqt5 (5.13.0) mysql客户端:pip install mysqlclient (1.4.2) mysql 连接器:pip install mysql-connector (2.2.9)

但是我之前在 PyQt5 的 sqldrivers 文件夹中编译的驱动程序,因为那里也缺少驱动程序。

我的班级:

class SqlConnector(QSqlDatabase):
    def __init__(self):
        super(SqlConnector, self).__init__()
        self.db = self.connect()

    def __del__(self):
        self.db.close()

    def connect(self):
        db = QSqlDatabase.addDatabase("QMYSQL")
        db.setHostName("hostname")
        db.setDatabaseName("database")
        db.setUserName("username")
        db.setPassword("1234567890")

        ok = db.open()

        if ok:
            print("Connection established")
            return db
        else:
            print("Connection failed: ", db.lastError().text())
            return None

    def getPools(self):
        query = QSqlQuery("SELECT id, name, token, dlxCode FROM AnalysisPool", self.db)

        model = QSqlQueryModel()
        model.setQuery(query)

        return model

主要方法:

from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery
from PyQt5.QtWidgets import QApplication, QTableView

if __name__ == "__main__":
    app = QApplication(sys.argv)

    poolView = QTableView()
    poolView.show()

    database = SqlConnector()

    # poolView.setModel(database.getPools())

    sys.exit(app.exec_())

PyQt 的库路径是 C:/Python/lib/site-packages/PyQt5/Qt/pluginsC:/Python

使用的操作系统是Windows 10 (1809) 64-Bit,我在路径变量中包含了 MySQLServer lib 文件夹。

我不知道该怎么做,我已经阅读了有关此主题的所有 SO 问题,但没有针对我的问题的有效解决方案。

【问题讨论】:

print(QtCore.QCoreApplication.libraryPaths()) 的输出是什么? @eyllanesc 输出为['C:/Python/lib/site-packages/PyQt5/Qt/plugins', 'C:/Python'] 尝试将libmysql.dll复制到C:/Python/lib/site-packages/PyQt5/Qt/plugins/sqldrivers 什么都没有改变,我又得到了同样的错误。未加载驱动程序。 在 Linux 上,我必须将 libqsqlmysql.so(类似于 Windows 上的 libmysql.dll)复制到此文件夹 - PyQt 可以找到它,但它仍然无法加载它。我在其他问题中发现使用ldd libqsqlmysql.so 我可以看到它需要其他库,我发现我还需要libmysqlclient.so.18,它是MySQL 的一部分,而不是PyQt - 我只有libmysqlclient.so.20。安装正确的版本后,它适用于我在 Linux 上。 【参考方案1】:

对我来说是这样工作的:卸载通过 pip3 安装的包。 pip3 卸载 PyQt5 为您的发行版(Linux 案例)安装本机软件包。在我的情况下是 Fedora 须藤 dnf 安装 python3-qt5 python3-qt5-qtbase --allowerasing 使用一个选项来覆盖旧文件,例如 --force 或 --allowerasing 或类似的东西

【讨论】:

以上是关于PyQt5 QMYSQL 驱动程序未加载的主要内容,如果未能解决你的问题,请参考以下文章

Qt5、C++:未加载 QMYSQL 驱动程序

Qt:Windows 10:未加载 QMYSQL 驱动程序

QSqlDatabase:Mac OS 上未加载 QMYSQL 驱动程序

qt 5.8 sql 连接错误:Windows 10 上未加载 QMYSQL 驱动程序

同样,未加载 QT 5.12.2 QMYSQL 驱动程序。图书馆虽然

qt5.1.1 mysql ubuntu QMYSQL驱动未加载