PySide + QtSql - 无法加载数据库驱动程序

3 投票
2 回答
2412 浏览
提问于 2025-04-18 04:22

编辑:我需要修改一下问题,因为我发现这个问题不仅和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 个回答

0

如果你在使用现代的 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

1

在这里的StackOverflow上找到了解决方案(虽然是关于PyQt的,而不是PySide,但同样适用):PyQT找不到任何SQL驱动程序

简单来说,在调用addDatabase之前,先放这段代码:

site_pack_path = site.getsitepackages()[1]
QtGui.QApplication.addLibraryPath('{0}\\PySide\\plugins'.format(site_pack_path))

撰写回答