Я пытаюсь использовать SQLTableModel из PyQt6 (устанавливается с помощью pip) в Python 3.11. Для этого мне нужно подключиться к моей базе данных Postgresql 13 (размещенной на AWS) с помощью драйвера QPSQL из PyQt6.
Проблема на этом этапе: когда я пытаюсь выполнить открытие из базы данных, происходит сбой, указывающий на следующее:
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
Я попробовал решение, в котором упоминается добавление переменных среды в путь к папкам Lib и Bin Postgresql, решение, упомянутое в этой ссылкеhttps://www.pythonguis.com/faq/postgres-pyqt5-windows-driver-not-loaded/ дважды безуспешно в пользовательских и системных переменных.
Я прочитал в документации Qt раздел «Как построить плагин QPSQL в Windows» по этой ссылке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
Чего я тоже не могу сделать, так как команда qmake не распознается в моем CMD Windows.
Я также пробовал скопировать 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 вы найдете кучу файлов DLL в каталоге , где находятся bin/
клиентские двоичные файлы ( psql.exe
, , и т. д.). Скопируйте все эти файлы вместе с в папку, из которой ваше приложение сможет их найти.pg_dump.exe
*.dll
libpq.dll
С другой стороны, если проблема заключается в том, что зависимости libpq.dll
не могут быть найдены, и вы попытались добавить bin
каталог Postgres в систему %PATH%
, этот метод должен был сработать изначально.
решение2
Мне помогла установка драйвера PostgreSQL ODBC для Windows. Версия 10 работает, но я не уверен, работают ли более новые версии с PyQt.
Вам также придется добавить правильную папку bin в системный путь. Для меня это было в
C:\Program Files\psqlODBC\1000\bin