我被迫尝试从PySide移植到PySide2,因为我正在开发在Maya中使用的代码(在Windows 7上),而Maya 2017已移至PySide2。
PySide2随Maya一起提供,但仅与驱动程序一起与sqlite DB对话。因此,我需要告诉Qt一个包含MySql驱动程序的新DIR,如下所示:
from PySide2 import QtWidgets
QtWidgets.QApplication.addLibraryPath("C:\temp\plugins")
此DIR包含一个子sqldrivers DIR,其中包含驱动程序。这有效-当我调用QtSql.QSqlDatabase.drivers()时,新的驱动器就在那里了,所以我有了正确的驱动器,并且正在使用它。
但是,当我创建一个新的数据库并调用open时:
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 \插件”)
使用:
打印(PySide2.QtCore.QLibraryInfo.location(PySide2.QtCore.QLibraryInfo.PluginsPath)),我可以看到路径正确。
一声问候