Estoy intentando usar SQLTableModel de PyQt6 (instalado con pip) en Python 3.11. Para esto necesito conectarme a mi base de datos Postgresql 13 (alojada en AWS) usando el controlador QPSQL de PyQt6.
El problema está en este paso, cuando intento ejecutar la apertura desde la base de datos falla indicando que:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QPSQL
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
El código que utilizo para la prueba es el siguiente:
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())
Podría pensar que el problema radica en la instancia QCoreApplication requerida; sin embargo, añadiendo
app = QCoreApplication(sys.argv)
el mismo mensaje resulta sin la última línea, es decir
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QPSQL
Probé una solución que menciona agregar variables de entorno a la ruta de la carpeta Lib y Bin de Postgresql, solución mencionada en este enlacehttps://www.pythonguis.com/faq/postgres-pyqt5-windows-driver-not-loaded/ en variables de usuario y de sistema dos veces sin éxito.
Leí en la documentación de Qt una sección que dice "Cómo crear el complemento QPSQL en Windows" en este enlacehttps://doc.qt.io/qt-5/sql-driver.htmlque indica lo siguiente: Instale las bibliotecas de desarrollador de PostgreSQL adecuadas para su compilador. Suponiendo que PostgreSQL se instaló en C:\psql, cree el complemento de la siguiente manera:
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
Lo cual tampoco puedo hacer ya que el comando qmake no se reconoce en mi CMD de Windows.
También intenté copiar libpq.dll y libpq.lib dentro de la carpeta.
C:\Users\Raknaros\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyQt6\ Qt6\plugins\sqldrivers y dentro de la carpeta donde está mi archivo .py
Y el conductor sigue sin funcionar.
Estoy probando Dependency Walker, les dejo aquí la imagenCaminante de dependenciaque aparece al escanear el archivo qsqlpsql.dll, hasta donde puedo ver hay muchas dependencias no encontradas.
No tengo idea de qué puedo hacer para que el controlador funcione y termine mi aplicación de escritorio con PyQt6, esta situación es desesperada, espero que puedan ayudarme a cargar el controlador QPSQL por favor.
Me gustaría aplicar la compilación descrita en este enlace.https://doc.qt.io/qt-6.2/sql-driver.html, pero no sé cómo, ¿podrían ayudarme con un ejemplo o una descripción exacta?
Mi configuración es: Windows 10 64 Python 3.11 PyQt6
Respuesta1
También intenté copiar libpq.dll y libpq.lib dentro de la carpeta.
Eso no debería funcionar a menos que libpq.dll
también se copien las dependencias de. En una instalación de PostgreSQL, encontrará un montón de archivos DLL en el bin/
directorio donde se encuentran los archivos binarios del lado del cliente ( psql.exe
,, etc...). pg_dump.exe
Copie todos estos *.dll
archivos libpq.dll
en una carpeta desde donde su aplicación pueda encontrarlos.
Por otro lado, si el problema es que libpq.dll
no se pueden encontrar las dependencias de y has intentado agregar el bin
directorio de Postgres al sistema %PATH%
, ese método debería haber funcionado en primer lugar.
Respuesta2
Lo que funcionó para mí fue instalar el controlador ODBC de PostgreSQL para Windows. La versión 10 funciona y no tengo claro si las versiones más nuevas funcionan con PyQt.
También deberá agregar la carpeta bin correcta a la ruta de su sistema. Para mi fue en
C:\Program Files\psqlODBC\1000\bin