Путевые заметки в процессе познания Python и PyQt/PySide.
Помни - только тег CODE не портит код добавлением пробела в начало пустой строки.
Помни - только тег CODE не портит код добавлением пробела в начало пустой строки.
К вопросу о доступе из Python к PostgreSQL.
Запись от iamvic размещена 12.12.2020 в 15:58
Ещё одна памятка на тему, навеянную обсуждением Проблема подключения к базе данных PostgreSQL с PyQt5.QtSql. Драйвер не загружен. Что делать, если надо обеспечить доступ к PostgreSQL из двух Python-ов разной разрядности, установленных в одной системе (например, мой стенд https://www.cyberforum.ru/blog... g6863.html)? Ведь каждому требуется своё... На самом-то деле, Python-у от установленного в системе PostgreSQL для работы требуется только соответствующая клиентская часть, а PostgreSQL отличается тем, что у него нет отдельного клиента. Его надо ставить целиком, даже если на конкретном рабочем месте локальный сервер не нужен. В этом случае службу PostgreSQL можно просто остановить, отключить, запретить запуск при старте, например, через Панель управления -> Администрирование -> Службы компонентов -> Службы (локальные) находим соответствующую службу с именем postgresql-..., останавливаем её и меняем тип запуска Автоматический -> Вручную. Более экзотичный способ состоит в выколупывании DLL-ек, ответственных за клиентскую часть PostgreSQL (спасибо vic5710 за ссылочку http://kostyan9k.blogspot.com/... resql.html, обнародованную в Проблема подключения к базе данных PostgreSQL с PyQt5.QtSql. Драйвер не загружен). Остаётся только попробовать реализовать на практике возможные решения. В установленных на стенде Python-ах обновляем pip и устанавливаем PyQt5. Ставим PostgreSQL v10.15.1 разрядности 64-bit и 32-bit. Останавливаем и запрещаем запуск при старте 32-битного PostgreSQL. Пишем скриптик, в котором при указании параметра будет подсовываться PostgreSQL с разрядностью, отличной от разрядности Python: pgsql_check.py:
Код:
C:\Tools>py32 pgsql_check.py Windows (64bit) and Python (32bit) PostgreSQL (32bit) os.environ["PATH"] = C:\Program Files (x86)\PostgreSQL\10\bin;C:\Program Files ( x86)\PostgreSQL\10\lib;C:\Program Files (x86)\Python38-32\lib\site-packages\PyQt 5\Qt\bin;C:\Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Pyth on38-32\;C:\Tools;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Win dows\System32\WindowsPowerShell\v1.0\ db.driverName() = QPSQL db.isValid() = True C:\Tools>py32 pgsql_check.py 1 Windows (64bit) and Python (32bit) PostgreSQL (64bit) os.environ["PATH"] = C:\Program Files\PostgreSQL\10\bin;C:\Program Files\Postgre SQL\10\lib;C:\Program Files (x86)\Python38-32\lib\site-packages\PyQt5\Qt\bin;C:\ Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Python38-32\;C:\ Tools;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System3 2\WindowsPowerShell\v1.0\ QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 db.driverName() = QPSQL db.isValid() = False C:\Tools>py64 pgsql_check.py Windows (64bit) and Python (64bit) PostgreSQL (64bit) os.environ["PATH"] = C:\Program Files\PostgreSQL\10\bin;C:\Program Files\Postgre SQL\10\lib;C:\Program Files\Python38\lib\site-packages\PyQt5\Qt\bin;C:\Program F iles\Python38\Scripts\;C:\Program Files\Python38\;C:\Tools;C:\Windows\system32;C :\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\ db.driverName() = QPSQL db.isValid() = True C:\Tools>py64 pgsql_check.py 1 Windows (64bit) and Python (64bit) PostgreSQL (32bit) os.environ["PATH"] = C:\Program Files (x86)\PostgreSQL\10\bin;C:\Program Files ( x86)\PostgreSQL\10\lib;C:\Program Files\Python38\lib\site-packages\PyQt5\Qt\bin; C:\Program Files\Python38\Scripts\;C:\Program Files\Python38\;C:\Tools;C:\Window s\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerS hell\v1.0\ QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 db.driverName() = QPSQL db.isValid() = False 1. для получения доступа из Python к PostgreSQL необходимо и достаточно добавить пути к клиентской части PostgreSQL соответствующей разрядности в переменную окружения PATH текущей сессии. Общесистемную трогать не надо. 2. PostgreSQL, из которого подтягивается клиентская часть, должен соответствовать разрядности Python. 3. отключение локального сервера PostgreSQL, из которого подтягивается клиентская часть, не мешает загрузке драйвера. |
Всего комментариев 0
Комментарии