DPI-1050: Клиентская библиотека Oracle имеет версию 0.0, но требуется версия 11.2 или выше

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

Я уже сделал все это руководство говорит, что я должен иметь в качестве требований, но ошибка продолжает появляться. Пробовал подключиться через sql*, работает как надо. Я скачал клиентские библиотеки оракула 12.2 (32-битная версия, поскольку она должна иметь ту же архитектуру, что и Python), я работаю с Oracle Database 11g версии 11.2.0.3, Python 3.7 и уже установил Visual Studio Redistributable 2013.

Это скрипт Python, который я использую для подключения к БД. Очевидно, что IP и порт отличаются от реальных, как и учетные данные.

import cx_Oracle

host='196.0.0.0'
port='8080'
service_name='SID'
pwd= 'PASS'

dsn_tns = cx_Oracle.makedsn(host,port,service_name)

connection = cx_Oracle.connect('user',pwd,dsn_tns)

Всякий раз, когда я запускаю его, я получаю сообщение об ошибке, хотя папка клиентских библиотек оракула уже находится в ПУТИ моего компьютера. Нужно ли что-то настраивать со стороны сервера? Спасибо за помощь!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
9 681
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Сообщение об ошибке было улучшено в cx_Oracle 7.1, но проблема в том, что была обнаружена более старая версия (чем 11.2) клиентских библиотек Oracle. Вы должны убедиться, что более новая версия, которую вы установили, обнаруживается. Вы можете сделать это, убедившись, что ваша переменная среды PATH сначала содержит ваши клиентские библиотеки 12.2. Раньше старые версии библиотек Oracle Client часто устанавливались в C:\windows\system32.

Я снова проверил PATH, кажется, что установлены только клиентские библиотеки 12.2, поэтому более старой версии нет.

MFTS 10.04.2019 17:02

Выполните поиск своей машины для OCI.DLL. Я полагаю, вы найдете другую копию где-то раньше в вашей переменной окружения PATH.

Anthony Tuininga 11.04.2019 18:04
Ответ принят как подходящий

У меня была точно такая же проблема, и я сослался на документ, на который вы ссылаетесь здесь. Я использую PyCharm в качестве IDE и использую python.exe, который использует pycharm, я обнаружил, что он 32-битный (просто щелкните python.exe, и откроется командная строка, например экран, и в первой строке будет указано, является ли он 32-битным или 64-битным).

Затем, используя приведенную ниже ссылку, я загрузил Oracle Instant Client.

https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

Я выбрал 32-битную версию и версию 12.2 (на момент написания этой статьи последней была v18.x). Эта 32-битная версия должна соответствовать вашей версии Python (которая в моем случае также была 32-битной).

Затем я извлек zip-файл мгновенного клиента, поместил его в папку C:\oracle (неважно, куда вы поместили), и моя структура каталогов была..

C:\oracle\instantclient_12_2

Теперь я помещаю это местоположение в качестве первого местоположения в переменную системной среды «Путь» на компьютере с Windows.

После всего этого я перезапустил машину (не нужно), использовал pycharm и подключился вот так...

import cx_Oracle as cxo
conn = cxo.connect("user_id", "password", "host_name:port_no/sid")
print(conn.version)
cur = conn.cursor()
cur.execute('SELECT \'X\' FROM DUAL')
for result in cur:
    print(result[0])
cur.close()
conn.close()

На самом деле это проблема версии. Я обнаружил ту же проблему, когда использовал версию 19. Я решил эту проблему, когда изменил версию на 12.2.

Проблема может быть связана с Эта проблема.
Вкратце:
Oracle Instant Client версии 19.3.0.0.0 не поддерживается в Windows 7.
Это также упоминается в Контрольный список операционной системы для установки клиента базы данных Oracle.

У меня была такая же проблема DPI-1050: Oracle Client library is at version 0.0 but version 11.2 or higher is needed в Windows 10 с PyCharm и Selenium.

Я обнаружил, что приложение, установленное на моем компьютере, содержит файл oic.dll. Я знаю, что это приложение использует очень старую технологию, и впервые попробовал ее. Переименовал этот файл в другой и проблема была решена. Соединение с БД прошло успешно

Единственная проблема в моем случае заключается в том, что в следующий раз, когда я запущу это приложение, ему понадобится этот файл, поэтому мне нужно изменить имя файла обратно на oic.dll.

Вам необходимо установить ту же версию Python и клиента базы данных. Например: 64-битный Python и 64-битный клиент или оба 32-битных будут работать. Я устал с Oracle XE 18c и python-3.8.3-amd64.exe

Другие вопросы по теме