PyQt6 QPSQL 驱动程序未加载

PyQt6 QPSQL 驱动程序未加载

我正在尝试在 Python 3.11 中使用 PyQt6 (使用 pip 安装) 中的 SQLTableModel。为此,我需要使用 PyQt6 中的 QPSQL 驱动程序连接到我的 Postgresql 13 数据库 (托管在 AWS 上)。

问题就出在这一步,当我尝试从数据库执行打开时,它失败,表明:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QPSQL
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

我用于测试的代码如下:

db = QSqlDatabase.addDatabase("QPSQL")
db.setHostName('host')
db.setDatabaseName("dbname")
db.setUserName('user')
db.setPassword('pass')
db.setConnectOptions("-c debug_print_parse=on -c debug_print_rewritten=on -c debug_print_plan=on -c debug_pretty_print=on")

if not db.open():
    print("Error al abrir la base de datos:",db.lastError().text())

您可能认为问题在于所需的 QCoreApplication 实例;但是,通过添加

app = QCoreApplication(sys.argv)

相同的消息结果没有最后一行,即

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QPSQL 

我尝试过一个解决方案,其中提到将环境变量添加到 Postgresql 的 Lib 和 Bin 文件夹路径,此链接中提到的解决方案https://www.pythonguis.com/faq/postgres-pyqt5-windows-driver-not-loaded/ 在用户和系统变量中两次均未成功。

我读了 Qt 文档中的一个部分,其中提到“如何在 Windows 上构建 QPSQL 插件”,链接如下https://doc.qt.io/qt-5/sql-driver.html这表明:为您的编译器安装适当的 PostgreSQL 开发人员库。假设 PostgreSQL 安装在 C:\psql 中,请按如下方式构建插件:

cd C:\Users\Raknaros\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyQt6\Qt6\plugins\sqldrivers
qmake -- PSQL_INCDIR=C:\Program Files\PostgreSQL\13\include
 PSQL_LIBDIR=C:\Program Files\PostgreSQL\13\lib
nmake sub psqlcmake
nmake install

由于我的 Windows CMD 无法识别 qmake 命令,因此我也无法执行此操作。

我还尝试复制文件夹内的 libpq.dll 和 libpq.lib

C:\Users\Raknaros\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyQt6\ Qt6\plugins\sqldrivers 以及我的.py 文件所在的文件夹内

但驱动程序仍然不起作用。

我正在测试 Dependency Walker,我在这里留下图片依赖性遍历器扫描 qsqlpsql.dll 文件时出现的问题,据我所知,有很多依赖项未找到。

我不知道该怎么做才能让驱动程序工作并用 PyQt6 完成我的桌面应用程序,这种情况很绝望,我希望你能帮助我加载 QPSQL 驱动程序。

我想应用此链接中描述的编译https://doc.qt.io/qt-6.2/sql-driver.html,但我不知道如何,您能否帮我举个例子或给出一个确切的描述。

我的设置是:Windows 10 64 Python 3.11 PyQt6

答案1

我还尝试复制文件夹内的 libpq.dll 和 libpq.lib

除非还复制了依赖项,否则此操作将不起作用libpq.dll。在 PostgreSQL 安装中,您会在bin/客户端二进制文件(、等)所在的目录psql.exepg_dump.exe找到一堆 DLL 文件。将所有这些*.dll文件连同复制libpq.dll到您的应用程序可以找到它们的文件夹中。

另一方面,如果问题在于libpq.dll找不到的依赖项,并且您已尝试将 Postgresbin目录添加到系统%PATH%,那么该方法应该首先起作用。

答案2

对我有用的是安装适用于 Windows 的 PostgreSQL ODBC 驱动程序。版本 10 可以工作,但我不清楚较新的版本是否适用于 PyQt。

您还必须将正确的 bin 文件夹添加到系统路径中。对我来说,它位于

C:\Program Files\psqlODBC\1000\bin

相关内容