PyQt6 QPSQL-Treiber nicht geladen

PyQt6 QPSQL-Treiber nicht geladen

Ich versuche, das SQLTableModel von PyQt6 (installiert mit pip) in Python 3.11 zu verwenden. Dazu muss ich mithilfe des QPSQL-Treibers von PyQt6 eine Verbindung zu meiner Postgresql 13-Datenbank (gehostet auf AWS) herstellen.

Das Problem liegt in diesem Schritt. Wenn ich versuche, das Öffnen aus der Datenbank auszuführen, schlägt es fehl und zeigt Folgendes an:

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

Der Code, den ich für den Test verwende, ist der folgende:

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())

Sie könnten denken, dass das Problem in der erforderlichen QCoreApplication-Instanz liegt. Durch Hinzufügen

app = QCoreApplication(sys.argv)

die gleiche Meldung wird ohne die letzte Zeile ausgegeben, d.h.

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

Ich habe eine Lösung ausprobiert, die das Hinzufügen von Umgebungsvariablen zum Lib- und Bin-Ordnerpfad von Postgresql erwähnt, die in diesem Link erwähnt wirdhttps://www.pythonguis.com/faq/postgres-pyqt5-windows-driver-not-loaded/ sowohl in Benutzer- als auch in Systemvariablen zweimal erfolglos.

Ich habe in der Qt-Dokumentation einen Abschnitt gelesen, in dem es heißt: „So erstellen Sie das QPSQL-Plugin unter Windows“ unter diesem Linkhttps://doc.qt.io/qt-5/sql-driver.htmlwas Folgendes bedeutet: Installieren Sie die entsprechenden PostgreSQL-Entwicklerbibliotheken für Ihren Compiler. Vorausgesetzt, PostgreSQL wurde in C:\psql installiert, erstellen Sie das Plugin wie folgt:

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

Was ich auch nicht tun kann, da der Befehl qmake in meiner Windows-CMD nicht erkannt wird.

Ich habe auch versucht, die libpq.dll und libpq.lib in den Ordner zu kopieren

C:\Users\Raknaros\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyQt6\ Qt6\plugins\sqldrivers und im Ordner, in dem sich meine .py-Datei befindet

Und der Treiber funktioniert immer noch nicht.

Ich teste Dependency Walker. Ich lasse hier das BildAbhängigkeits-Walkerdas erscheint beim Scannen der Datei qsqlpsql.dll. Soweit ich sehen kann, wurden viele Abhängigkeiten nicht gefunden.

Ich habe keine Ahnung, was ich tun kann, damit der Treiber funktioniert und ich meine Desktop-Anwendung mit PyQt6 fertigstellen kann. Die Situation ist verzweifelt. Ich hoffe, Sie können mir bitte beim Laden des QPSQL-Treibers helfen.

Ich möchte die in diesem Link beschriebene Zusammenstellung anwendenhttps://doc.qt.io/qt-6.2/sql-driver.html, aber ich weiß nicht wie, könnten Sie mir bitte mit einem Beispiel oder einer genauen Beschreibung helfen.

Meine Einstellungen sind: Windows 10 64 Python 3.11 PyQt6

Antwort1

Ich habe auch versucht, die libpq.dll und libpq.lib in den Ordner zu kopieren

Das sollte nicht funktionieren, wenn nicht auch die Abhängigkeiten von libpq.dllkopiert werden. Bei einer PostgreSQL-Installation finden Sie eine Reihe von DLL-Dateien in dem bin/Verzeichnis, in dem sich die clientseitigen Binärdateien ( psql.exe, pg_dump.exeusw.) befinden. Kopieren Sie alle diese *.dllDateien zusammen mit libpq.dllin einen Ordner, in dem Ihre App sie finden kann.

Wenn das Problem hingegen darin besteht, dass die Abhängigkeiten libpq.dllnicht gefunden werden können und Sie versucht haben, das Postgres- binVerzeichnis zum System hinzuzufügen %PATH%, hätte diese Methode von Anfang an funktionieren müssen.

Antwort2

Bei mir hat es funktioniert, den PostgreSQL ODBC-Treiber für Windows zu installieren. Version 10 funktioniert und ich bin mir nicht sicher, ob die neueren Versionen mit PyQt funktionieren.

Sie müssen auch den richtigen Bin-Ordner zu Ihrem Systempfad hinzufügen. Bei mir war es in

C:\Program Files\psqlODBC\1000\bin

verwandte Informationen