Путаница при расшифровке кода ошибки Python-модуль для подключения к Oracle (cx_Oracle)
Вы все уволены. Помимо этого, мне нужна помощь в расшифровке кода ошибки, который я вижу при попытке использовать модуль cx_Oracle для подключения к базе данных Oracle. По какой-то безответственной и дебильной причине я использую Python2.7 вместо Python3000. Сообщение об ошибке, которое я вижу, выглядит следующим образом (скопируйте / вставьте, конечно):
>>> connection = cx_Oracle.connect('user', 'password123', 'db1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: DPI-1050: Oracle Client library is at version 11.2 but
must be at version 0.0 or higher
>>>
Я нашел ужасную документацию внутри самого модуля с помощью этой команды: help('cx_Oracle.connect')
Эта команда выдает следующую страницу, первая страница показана только для краткости:
Help on class Connection in cx_Oracle:
cx_Oracle.connect = class Connection(__builtin__.object)
| Methods defined here:
|
| __enter__(...)
|
| __exit__(...)
|
| __init__(...)
| x.__init__(...) initializes x; see help(type(x)) for signature
|
| __repr__(...)
| x.__repr__() <==> repr(x)
|
| begin(...)
|
| cancel(...)
|
| changepassword(...)
|
| close(...)
|
| commit(...)
|
| createlob(...)
|
| cursor(...)
|
| deq(...)
|
| deqoptions(...)
|
| enq(...)
|
| enqoptions(...)
|
| getSodaDatabase(...)
|
| gettype(...)
|
| msgproperties(...)
|
| ping(...)
|
| prepare(...)
-- More --
Я нашел лучшее объяснение того, как использовать API, на следующей веб-странице: https://dzone.com/articles/python-code-can-connect-oracle
Интересно, почему авторы модуля не написали четких инструкций, как это сделал автор веб-страницы, например:
# Connect using the ordered parameters user, password and SID.
dbconn = cx_Oracle.connect('user', 'password' ,'SID')
Я также нашел дополнительную документацию по следующему адресу: https://developer.oracle.com/databases/database-for-python-developers-1
Эта документация может быть из другой эпохи и для более ранней реализации базы данных Oracle.
Из того, что я понял, этот плагин предназначен только для баз данных Oracle 11g и, возможно, ниже. Подключаемые базы данных, которые я использую, и обычные базы данных, отсутствие лучшего термина, все 12c. Этот плагин только для версии <=11 базы данных Oracle?
Копия / вставка ниже показывает баннер из одной из баз данных.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing op
ions
С уважением,
Тупой парень
----------------------ОБНОВИТЬ--------------------------- -------------------------
Я воспользовался полезной разработкой по совету этого программного проекта и теперь получаю новую ошибку. Я удалил некоторые вещи, которые, как мне кажется, мне не нужны, из моего пути относительно версии 11 БД Oracle и вижу новое сообщение об ошибке:
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> connection = cx_Oracle.connect('user', 'password', 'oracledb')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: DPI-1047: 32-bit Oracle Client library cannot be loaded
: "C:\app\client\corpDrone\product\12.1.0\client_1\bin\oci.dll is not the correct a
rchitecture". See https://oracle.github.io/odpi/doc/installation.html#windows fo
r help
Я понял. Я перешел по ссылке в сообщении об ошибке выше, а затем скачал 32-битное мгновенное клиентское программное обеспечение lite и поместил это как первое, что у меня на пути. Затем я последовал руководству и поместил файл tnsnames.ora в мою секунду, на которую ссылается переменная среды TNS_NAMES.:) Надеюсь, это поможет извините позже.:D
Еще более простой вариант - переустановить вашу реализацию Python. В моем случае мне нужен 64-битный Python для связи с 64-битным программным обеспечением СУБД Oracle.
1 ответ
Извиняюсь за путаницу. В сообщении об ошибке была ошибка. Это происходит только с очень старыми версиями клиентских библиотек Oracle. Я только что исправил это здесь: https://github.com/oracle/odpi/commit/d2fea3801286d054e18b0102e60a69907b7faa9a и это скоро будет выпущено как часть cx_Oracle 7.1.1.
Так что сообщение об ошибке действительно пытается сказать вам, что вам нужно иметь клиентские библиотеки Oracle версии 11.2 или выше, и у вас достаточно старая версия, чтобы она даже не знала, как сказать, какая это версия! Так что скорее всего 8i или 9i или ранние версии 10g. В этих старых версиях они часто хранились в c:\Windows\system32 и, таким образом, имеют приоритет над другими библиотеками, которые вы, возможно, установили. Вы можете форсировать проблему, установив переменную среды PATH, включив вначале C:\app\client\corporateDrone\product\12.1.0\client_1\bin. Если это не поможет, вам, возможно, придется найти и удалить старую версию OCI.dll - помните, что это повлияет на любое программное обеспечение, которое зависит от него!
Официальную документацию можно найти здесь: https://cx-oracle.readthedocs.io/en/latest/index.html. Существует запрос на улучшение, чтобы включить их во встроенную справку, которая, как вы отметили, не имеет ничего полезного.:-) Вы можете увидеть запрос на улучшение здесь: https://github.com/oracle/python-cx_Oracle/issues/175.
Надеюсь, это облегчит ваше замешательство!