PyQt5 QMYSQL 驱动程序未加载
Posted
技术标签:
【中文标题】PyQt5 QMYSQL 驱动程序未加载【英文标题】:PyQt5 QMYSQL Driver not loaded 【发布时间】:2019-07-12 11:50:55 【问题描述】:我知道这个问题有很多关于 SO 的问题和答案,但对我没有任何帮助。
我安装了最新的QT Creator 4.9.2
和Qt 5.13.0
MinGW 32-Bit
和mysqlServer 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/plugins
和 C:/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 驱动程序未加载的主要内容,如果未能解决你的问题,请参考以下文章
QSqlDatabase:Mac OS 上未加载 QMYSQL 驱动程序
qt 5.8 sql 连接错误:Windows 10 上未加载 QMYSQL 驱动程序