私は、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/ ユーザー変数とシステム変数の両方で 2 回失敗しました。
Qtのドキュメントで「WindowsでQPSQLプラグインをビルドする方法」というセクションを読みました。このリンクドライバこれは次のことを示します: コンパイラに適切な 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
qmake コマンドが Windows CMD で認識されないため、これも実行できません。
フォルダ内の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 ドライバーのロードにご協力いただければ幸いです。
このリンクに記載されているコンパイルを適用したいと思います参考文献ですが、方法がわかりません。例や正確な説明を教えていただけませんか。
私の設定は:Windows 10 64 Python 3.11 PyQt6
答え1
フォルダ内のlibpq.dllとlibpq.libもコピーしてみました
の依存関係もコピーされない限り、これは機能しませんlibpq.dll
。PostgreSQL のインストールでは、bin/
クライアント側のバイナリ ( psql.exe
、など) が配置されているディレクトリに多数の DLL ファイルがあります。これらすべてのファイルを、アプリが見つけられるフォルダにpg_dump.exe
コピーします。*.dll
libpq.dll
一方、問題が の依存関係がlibpq.dll
見つからないことであり、Postgresbin
ディレクトリをシステムに追加しようとした場合%PATH%
、その方法は最初から機能しているはずです。
答え2
私の場合は、Windows 用の PostgreSQL ODBC ドライバーをインストールするとうまくいきました。バージョン 10 は動作しますが、新しいバージョンが PyQt で動作するかどうかは不明です。
また、システムパスに正しいbinフォルダを追加する必要があります。私の場合は、
C:\Program Files\psqlODBC\1000\bin