Путаница при расшифровке кода ошибки Python-модуль для подключения к Oracle (cx_Oracle) - PullRequest
0 голосов
/ 14 февраля 2019

Вы все уволены.Помимо этого, мне нужна помощь в расшифровке кода ошибки, который я вижу, когда пытаюсь использовать модуль 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')

Я также нашел дополнительную документацию по следующему URL: https://developer.oracle.com/databases/database-for-python-developers-1

Эта документация может бытьиз другой эпохи и для более ранней реализации базы данных Oracle.

Насколько я понимаю, этот плагин предназначен только для баз данных 11g Oracle и, возможно, ниже.Подключаемые базы данных, которые я использую, и обычные базы данных, отсутствие лучшего термина, все 12c.Этот плагин предназначен только для версии <= 11 базы данных Oracle? </strong>

При копировании / вставке ниже показан баннер из одной из баз данных.

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

С уважением,

тупой парень

---------------------- ОБНОВЛЕНИЕ ----------------------------------------------------

Я взял полезныйDev по совету этого программного проекта, и теперь я получаю новую ошибку.Я удалил некоторые вещи, которые, по моему мнению, мне не нужны из моего пути относительно версии 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 Ответ

0 голосов
/ 15 февраля 2019

Извинения за путаницу.В сообщении об ошибке была ошибка.Это происходит только с очень старыми версиями клиентских библиотек 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.

Надеюсь, это облегчит вашу путаницу!

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