PySide + QtSql - 无法加载数据库驱动程序
编辑:我需要修改一下问题,因为我发现这个问题不仅和ODBC驱动有关,还和所有其他驱动,比如MYSQL、SQLITE等都有关系。
问题是这样的:我试图使用PySide和QtSql模块连接到一个数据库。
关键代码片段:
from PySide import QtGui
from PySide import QtSql
import sys
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
db = QtSql.QSqlDatabase.addDatabase('QODBC')
# or others: QMYSQL, QSQLITE etc.
sys.exit(app.exec_())
当我尝试运行它时,我收到了一个消息:
QSqlDatabase: QODBC driver not loaded
QSqlDatabase: available drivers:
而当我用PyQt4
替代PySide
时,我没有收到任何消息,我猜这意味着ODBC驱动在PyQt4中是可用的。不过,不幸的是,由于很多其他原因,我无法将我的应用程序从PySide切换到PyQt4。
当我查看Python的Lib文件夹时,我发现python-3.3.2\Lib\site-packages\PySide\plugins\sqldrivers
里面有一些DLL文件,包括qsqlodbc4.dll
。所以还有其他东西缺失,但我不知道是什么。
正如我所说,问题不仅仅出在ODBC上,而是所有数据库驱动都有问题。
2 个回答
如果你在使用现代的 PySide6 时遇到类似的问题,这里有一个完整的解决方案:https://stackoverflow.com/a/72169911/211369
其中一个解决办法是定义一个叫做 QT_PLUGIN_PATH
的环境变量,这个变量需要包含一个名为 "sqldrivers" 的子目录,里面存放着 Qt 平台的 SQL 插件。
在你的例子中,QT_PLUGIN_PATH=c:/python-3.3.2/Lib/site-packages/PySide/plugins
顺便提一下,我知道的几乎一半的信息都是在这里官方发布的:https://doc.qt.io/qt-6/deployment-plugins.html
在这里的StackOverflow上找到了解决方案(虽然是关于PyQt的,而不是PySide,但同样适用):PyQT找不到任何SQL驱动程序
简单来说,在调用addDatabase之前,先放这段代码:
site_pack_path = site.getsitepackages()[1]
QtGui.QApplication.addLibraryPath('{0}\\PySide\\plugins'.format(site_pack_path))