Доступ к cx_Oracle во Flask-SQLAlchemy возможен только через oracle-Instant Client? - PullRequest
0 голосов
/ 06 февраля 2019

Моя база данных Oracle [OracleSlim] запущена и работает в контейнере Docker, и я создал пользователя, таблицу внутри контейнера.он работает на 0.0.0.0: 1521 .Нужно ли мне установить 'oracle Instant Client', чтобы cx_oracle работал?

Я попробовал эту строку подключения 'sqlplus administrator / Welcome121 @ ORCLCDB' внутри контейнера.он работает.

from sqlalchemy import create_engine
import cx_Oracle
engine=create_engine('oracle://username:password@hostname:port/sid')

Ошибка:

cx_Oracle.DatabaseError: DPI-1047: 64-битная клиентская библиотека Oracle не может быть загружена: "libclntsh.so: не удается открыть общий объектfile: Нет такого файла или каталога ".См. https://oracle.github.io/odpi/doc/installation.html#linux для получения справки

Удачное соединение с оракулом в объекте Engine моей фляги-Sqlalchemy.Новые ORM или пакеты для подключения оракула приветствуются.Примечание: Я не установил мгновенный клиент oracle на свой локальный , но установил его в мой контейнер.

ОБНОВЛЕНО

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

import cx_Oracle
constr = 'system/oracle@//172.17.0.2:1521/orcl.localdomain'
conn = cx_Oracle.connect(constr)

возможно ли подключиться к контейнеру, работающему на локальном хосте: 1521, с помощью python cx_Oracle или Flask-SQLAlchemy?

Ответы [ 2 ]

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

Если sqlplus administrator/Welcome121@ORCLCDB' работает, то у вас уже должны быть доступны клиентские библиотеки Oracle, поскольку для sqlplus и cx_Oracle требуется одинаковый набор библиотек Oracle.Убедитесь, что sqlplus действительно может запрашивать вашу базу данных.

Убедитесь, что версия SQL * Plus 11.2 или выше.Затем выясните, в чем разница между вашей конфигурацией для sqlplus и python.Настройте переменные среды, необходимые для cx_Oracle, так же, как для sqlplus.Если у вас установлен полный клиент Oracle или Oracle DB, вы можете настроить среду перед запуском python с помощью source /usr/local/bin/oraenv.Если у вас старый Oracle XE 11.2, введите команду source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

Если у вас нет клиентских библиотек Oracle, установите их, следуя https://cx -oracle.readthedocs.io / en / latest /installation.html # Установка-cx-oracle-on-linux Я рекомендую использовать ldconfig для задания пути поиска библиотеки.

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

Вам нужны клиентские библиотеки oracle:

Это происходит из cx_Oracle docs:

Для использования cx_Oracle 7 с Python и базой данных Oracle вам нужно: Python 2.7 или 3.5 и выше.Более старые версии cx_Oracle могут работать со старыми версиями Python.Клиентские библиотеки Oracle.Они могут быть из бесплатного Oracle Instant Client или из Oracle Database, если Python находится на том же компьютере, что и база данных.Клиентские библиотеки Oracle версий 18, 12 и 11.2 поддерживаются в Linux, Windows и macOS.Пользователи также сообщили об успехе с другими платформами.База данных Oracle.Совместимость стандартной клиент-серверной версии Oracle позволяет cx_Oracle подключаться как к старым, так и к новым базам данных.

...