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/ 사용자 및 시스템 변수 모두에서 두 번 실패했습니다.
Qt 문서에서 이 링크의 "Windows에서 QPSQL 플러그인을 빌드하는 방법"이라는 섹션을 읽었습니다.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
내 Windows CMD에서 qmake 명령이 인식되지 않기 때문에 어느 쪽도 할 수 없습니다.
폴더 안에 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 파일이 있는 폴더 내부
그리고 드라이버는 여전히 작동하지 않습니다.
종속성 워커를 테스트 중입니다. 여기에 이미지를 남겨둡니다.의존성 워커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 설치에서는 bin/
클라이언트 측 바이너리( psql.exe
, pg_dump.exe
등...)가 있는 디렉터리에서 여러 DLL 파일을 찾을 수 있습니다 . 이러한 모든 *.dll
파일을 libpq.dll
앱에서 찾을 수 있는 폴더에 복사하세요.
반면에 종속성을 찾을 수 없다는 문제가 있고 Postgres 디렉터리를 시스템에 libpq.dll
추가하려고 시도한 경우 해당 방법이 먼저 작동했을 것입니다.bin
%PATH%
답변2
나에게 도움이 된 것은 Windows용 PostgreSQL ODBC 드라이버를 설치하는 것이었습니다. 버전 10은 작동하지만 최신 버전이 PyQt에서 작동하는지 확실하지 않습니다.
또한 시스템 경로에 올바른 bin 폴더를 추가해야 합니다. 나에게는 그것이 있었다
C:\Program Files\psqlODBC\1000\bin