Как получить доступ к базе данных Oracle без установки клиента Oracle и cx_Oracle?

У меня есть два сервера RHEL, на которых работают Python 2.4 и 2.6 отдельно. На другом сервере, к которому мне нужно получить доступ, есть база данных Oracle.

Я пытался установить cx_oracle на свой сервер RHEL, но обнаружил, что сначала должен быть установлен клиент Oracle.

Проблема в том, что у меня нет разрешения на установку клиента Oracle на оба сервера RHEL. На тех же серверах программа Perl может подключаться к базе данных Oracle, используя:

DBI->connect("dbi:Oracle:host=myhost.prod.com;sid=prddb",'username','password')

Может ли Python сделать то же самое без установки cx_oracle и клиента Oracle? Или есть какие-либо предложения о том, как самому написать модуль, чтобы делать то же самое?

Заранее спасибо!


person Gary    schedule 02.10.2013    source источник
comment
Для работы Perl установлен драйвер Oracle, и он взаимодействует с клиентом Oracle, установленным на той же машине, который затем взаимодействует с базой данных Oracle. Вам нужно клиентское программное обеспечение на машине, с которой вы хотите подключиться, поэтому похоже, что вы уже настроены и вам просто нужно установить драйверы и код Python. Oracle — очень скупая компания, и она тщательно контролирует свои драйверы, поэтому вам нужно будет использовать любые средства, чтобы поговорить с их клиентом. Если это означает cx_oracle, вам придется пойти по этому пути.   -  person the Tin Man    schedule 02.10.2013
comment
Спасибо вам, ребята. Сейчас я изучаю вызов модуля perl DBI из python.   -  person Gary    schedule 02.10.2013
comment
Не делай этого. Это запутанное и неработоспособное решение. Либо написать его на Perl, что было бы моим первым путем, потому что я знаю Perl лучше, чем Python, либо использовать чистый Python и загрузить необходимые драйверы; Используйте то, что вы знаете лучше.   -  person the Tin Man    schedule 02.10.2013


Ответы (3)


Обычно все, что вам нужно, это библиотеки, которые не обязательно требуют прав sudo. Извлеките их в место, откуда программное обеспечение сможет читать, и соответствующим образом установите следующие переменные среды:

ORACLE_HOME=path/to/where/you/extracted/libs
TNS_ADMIN=path/to/tnsnames.ora

Мне больше всего повезло пропустить tnsnames и просто указать хост, порт и т. Д. В соединении, но вполне возможно, что он вам понадобится для cx_oracle ... Я не помню, когда я использовал его много лет назад.

person user632657    schedule 02.10.2013
comment
Это решает проблему пользователя. Но вопрос Как мне получить доступ к базе данных Oracle без установки клиента Oracle и cx_Oracle? не получает ответа. - person guettli; 28.03.2017
comment
Если вы используете библиотеки Python, у вас нет другого выбора. По крайней мере, я не в курсе. Если вы хотите использовать Oracle DB, вы играете по их правилам. - person user632657; 29.03.2017
comment
если возможно, я использую PostgresSQL :-) в этом случае мы нашли обходной путь. Мы скоро получим http API. - person guettli; 29.03.2017

Выдержка из https://forum.omz-software.com/topic/184/oracle-database:

Для Oracle нет чистого клиента Python и, вероятно, никогда не будет. Даже замечательные сторонние наборы инструментов, такие как SQLalchemy, по-прежнему полагаются на cx_Oracle, лежащий в основе, для фактического взаимодействия с серверами баз данных Oracle.

— также, судя по решению Google, ответ отрицательный: на сегодняшний день не существует чистых клиентов Python Oracle.

person Erik Kaplun    schedule 02.10.2013
comment
... никогда не будет, разве нет героя-кодировщика, чтобы доказать обратное? Это возможно - не просто, но должно быть выполнимо. - person guettli; 28.03.2017
comment
Ссылка на форум Pythonista не работает, но Google спас положение! - person APC; 20.08.2019

если вы не хотите использовать cx_Oracle, вам следует использовать сценарии expect. (для python pexpect). Но вам нужно быть осторожным, чтобы справиться со всеми ожиданиями.

person FariZ    schedule 08.05.2016