gpt4 book ai didi

postgresql - 在 PyQt5 中使用 PostgreSQL 的正确方法是什么

转载 作者:行者123 更新时间:2023-12-04 13:35:31 24 4
gpt4 key购买 nike

我使用 PostgreSQL 9.6.17(安装在 LAN 上的 Linux 服务器上)并且有安装了 Python 3.7 或 3.8 和 PyQt 5.13.2 的 Win10(或 Win7)客户端,我使用该 PostgreSQL 服务器的 PyQt5 应用程序工作正常,但我真的不不知道我在做什么。
我来描述问题。如果我没有在 Win 客户端上安装 PostgreSQL(我不需要它,因为我在 Linux 服务器上使用 PostgreSQL)或者已经安装了它但不在路径中,我的应用程序会崩溃并显示错误:

"QSqlDatabase: QPSQL driver not loaded".


所以,我需要一些驱动程序。我在 Win 客户端上安装 PostgreSQL 9.6.x 并将其放在路径中,之后一切正常,但前提是我运气好并选择了正确的 PostgreSQL 版本。
另一种选择是我不在客户端机器上安装 PostgreSQL 9.6.x(为什么我需要安装它),只需复制一些 dll app目录下的文件。如果我找到正确的文件(驱动程序),一切正常,但如果我没有找到,应用程序会因错误而崩溃:

"QSqlDatabase: QPSQL driver not loaded"


或者更糟的是,识别服务器上的 PostgreSQL 数据库,有时可以正常工作,但是在第一次、第二次或第三次查询之后它崩溃了。
我复制到适用于 PyQt 5.13.2 的应用程序目录的驱动程序组合:
Timestamp                      Size File
25/02/2016 07:19 1,015,973 libiconv-2.dll
07/01/2016 09:02 1,550,023 libintl-8.dll
10/07/2019 20:20 145,408 libpq.dll
如果我安装 PyQt 5.14 或 5.15(而不是 PyQt 5.13.2),应用程序会崩溃,我害怕将 PyQt5 升级到 5.14 或更高版本。
所以,我的问题是:
我怎么知道我应该将哪些驱动程序( dll 文件)与各种版本的 PyQt5 一起复制到我的应用程序目录中,这对我来说是个谜。例如,我应该在 PyQt 版本 5.14 或 5.15 中使用哪些驱动程序,因为那些 3 dll s 从上面不再工作了吗?找到合适的驱动程序完全是随机猜测的工作,我真的不知道我在做什么,我可以说我对 PyQt 5.13.2 的驱动程序很幸运。而且,我不知道将驱动程序复制到我的应用程序目录(或将它们放在路径中的某个文件夹中)是否是正确的方法?
这里有一个很好的答案:
QT5: Failed to load psql driver in windows

"It's quite likely to be failing because there's a dependency of qsqlpsql.dll missing - either libpq.dll, or one of the libraries that libpq build requires." ... "You should use the same libpq your Qt's qsqlpgsql.dll was compiled against if possible."


如果这是真的,我应该怎么知道什么 libpq 库 qsqlpgsql.dll被编译进去了?我想 PyQt 5.13.2 的 qsqlpgsql.dll使用与 PyQt 5.14.x 不同的版本编译 qsqlpgsql.dll甚至 5.15.x 的 qsqlpgsql.dll .
此外,此链接有一些线索:
QPSQL driver not loaded Qt
通常,在 PyQt5 中使用 PostgreSQL 的最佳方式是什么。如果(正确版本的)PostgreSQL 未安装在客户端计算机上或路径中没有适当的驱动程序,则显然无法立即使用。
更新 :
我将通过假设的例子来提出这个问题。
假设我有一个 Qt (PyQt) 应用程序,用户客户端 Win10 计算机上的版本 Qt xyz(例如 5.15.0)和安装在 Linux 服务器上的 Postgres abc(例如 9.6.17),该应用程序从客户端计算机通过 LAN 访问(或VPN,或其他)。我不应该在客户端 Win10 计算机上安装 Postgres。哪些文件(Postgres dll 或 lib 驱动程序)取决于 Qt x.y.z 和 Postgres a.b.c 我必须在用户的应用程序目录或路径中有哪些文件才能让我的应用程序正常工作,以及如何找到这些文件。所以,我需要一个公式:(*.dll, *.dll,,,) = f(x.y.z, a.b.c)。
更新 (2020-09-25) :
我的问题自己解决了。结合 Py 3.8.3 和 PyQt 5.15.1,它现在可以正常工作了。我在几台 Win 客户端计算机上对其进行了测试。

最佳答案

所以在你的更新部分
你有两个系统:
系统 1) 带有 Linux 操作系统的服务器,例如

  • 也许(Qt 版本 5.15.0)
  • PostgreSql 9.6.17
  • 也许(Python 3.1.1)

  • 系统 2) 使用 Win OS 的客户端
  • Qt 版本 5.1.0
  • PostgreSql 9.6.17
  • Python 3.1.1

  • 我建议你的客户端系统至少应该有
    您的服务器库(此处为 9.6.17)版本。或者单独检查每个库的库兼容性。
    建议A:
    为什么不 build PyQt from source使用您选择的 libversion
    适用于系统 2,也可能适用于系统 1(如果需要)
    您将拥有两个系统的 *.dll 和 *.so 文件。
    请阅读如何使用特定驱动程序支持配置 qt 的文章:
    how to add db driver xy to qt
    建议B
    打包你的 Python 应用 via python installer pyinstaller包括你的 dll 文件。
    运送应用程序的一般 win-os 工作流程
    A) 使用构建中的所有 dll 文件(用于 qt 和 PostgreSQL)
    环境并将它们复制到与可执行文件相同的文件夹中。
    也许你使用这个程序 Dependency Walker
    找出其中哪些是相关联的。 (大部分时间在qt安装目录中找到)
    B) 将您的应用程序与所有 dll 文件一起发送,并确保目标操作系统
    具有相同的架构( i86| amd64| 等),并且使用相同的 PostgreSQL 服务器版本。

    关于postgresql - 在 PyQt5 中使用 PostgreSQL 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62304236/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com