Как сделать драйвер QOCI доступным для PyQt5

#python #database #oracle #pyqt #driver

#python #База данных #Oracle #pyqt #драйвер

Вопрос:

Я пытаюсь использовать QOCI драйвер для подключения к базе данных Oracle, но драйвер недоступен. Для этого простого кода:

 from PyQt5 import QtSql

QtSql.QSqlDatabase.isDriverAvailable('QOCI')
  

Я получаю False .

Я попытался проверить PATH настройки среды и вижу, что для TNS_ADMIN переменной установлена папка с файлом драйвера oci.dll :

 C:Atenainstantclient_11_2
  

но он по-прежнему недоступен.

Я попытался загрузить драйвер с сайта Oracle, настроить его в соответствии с инструкциями Oracle (изменить PATH переменную на новую папку драйвера, скопировать файл TNSnames.ora и т. Д.), Но драйвер по-прежнему недоступен.

Я хочу иметь драйвер, доступный для PyQt5, загрузить его и использовать для подключения к базе данных Oracle.

Ответ №1:

The OCI.DLL включен, например, в instantclient-basic-windowsXXXXX.zip Предположим, вы разархивировали файл, чтобы

 C:ORACLEIC12201instantclient_12_2 
  

чтобы сделать его доступным для других приложений, установите в пользовательской среде

 ORACLE_HOME=C:ORACLEIC12201instantclient_12_2
PATH=%PATH%;%ORACLE_HOME%
  

с этой настройкой любое приложение, использующее OCI.DLL должен найти его.
Конечно, вы должны установить правильный размер бит — т.Е. Если ваше приложение 32-битное, вам необходимо установить 32-битный мгновенный клиент — если это 64-битное приложение, вам нужен 64-битный мгновенный клиент.

Итак, насколько я вижу, вам нужно создать QOCI вручную. Для этого вам определенно нужен пакет SDK для instant client.

Источники в Интернете утверждают, что вам необходимо включить заголовки и библиотеки из SDK — к сожалению, похоже, что QOCI все еще зависит от Oracle Client 11.X — не мгновенного клиента, а обычного клиента.

необходимо использовать следующие библиотеки (последняя предназначена для клиента 12.x)

 oci.lib ociw32.lib oraocci12.lib 
  

на обычном клиенте

 %ORACLE_HOME%ocilibmsvc
  

на мгновенном клиенте

 %ORACLE_HOME%sdklibmsvc
  

необходимо включить следующие заголовки

 oci.h
  

на обычном клиенте

 %ORACLE_HOME%ociinclude
  

на мгновенном клиенте

 %ORACLE_HOME%sdkinclude
  

К сожалению, для MinGW нет особой поддержки, поэтому я не могу этого сделать.

команда «настроить» для подготовки всего должна включать

 -sql-oci -plugin-sql-oci  
  

Комментарии:

1. Копировать oraociei10.dll откуда и куда? Можете ли вы быть более конкретным? Может ли восстановление Qt5 из исходного кода (в Windows) помочь с этой проблемой?