我被迫尝试从 PySide 移植到 PySide2,因为我正在开发 Maya 内部使用的代码(在 Windows 7 上),而 Maya 2017 已转移到 PySide2。
PySide2 随 Maya 一起提供,但只附带与 sqlite 数据库对话的驱动程序。所以我需要告诉 Qt 一个包含 MySql 驱动程序的新 DIR,如下所示:
from PySide2 import QtWidgets
QtWidgets.QApplication.addLibraryPath("C:\temp\plugins")
此 DIR 包含一个包含驱动程序的子 sqldrivers DIR。这有效 - 当我调用 QtSql.QSqlDatabase.drivers() 时,新的驱动程序就在那里,所以我有正确的驱动程序并且正在被拾取。
然而,当我创建一个新的数据库并调用打开时:
db = QtSql.QSqlDatabase.addDatabase("QMYSQL3")
db.setDatabaseName("my_db")
db.setHostName("host")
db.setUserName("user")
db.setPassword("password")
db.open()
open 命令返回 False,数据库不可访问。我打电话:
db.lastError()
并得到:
# Result: <PySide2.QtSql.QSqlError("", "Driver not loaded", "Driver not loaded") at 0x0000000075410C08> #
注意:我们成功地用以前的 PySide 版本做了完全相同的事情。
其他线程提到了类似的事情,结果发现它缺少实际的 libmysql.dll,它是实际的 MySql DLL,如果丢失会导致相同的错误。但是我的系统上肯定有这个,而且它肯定在 PATH 中。它实际上是通过 PySide 成功获取的同一个文件。但是 PySide2 驱动程序不会打开与数据库的连接。
我怀疑可能是一个狡猾的司机,但想知道是否有人对此有任何经验或任何建议?
最佳答案
我有同样的错误,但是用的是 postgres。 我通过将 libpq.dll 连接器库放在我的 script.py 旁边来解决。
然后对于 mysql 它将是 libmysql.dll。
在我的例子中,我必须从 postgres 9.6 的源代码构建 libpq.dll
PySide2 似乎没有必要使用: QtWidgets.QApplication.addLibraryPath("C:\path_to\plugins")
使用: print (PySide2.QtCore.QLibraryInfo.location (PySide2.QtCore.QLibraryInfo.PluginsPath)),我可以看到路径是正确的。
一句问候
关于mysql - Windows 上 PySide2 的损坏的 MySql 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616256/