#python #oracle #cx-oracle
#python #Oracle #cx-oracle
Вопрос:
Я нашел этот веб-сайт, и он предполагает, что я мог бы подключиться к моей базе данных Oracle ADW Cloud с помощью python. Я попытался запустить приведенный ниже код, но продолжал сталкиваться с той же ошибкой. У кого-нибудь есть представление о том, как это решить? Примечание: пароль изменен по понятным причинам.
Код в Jupyter Notebooks:
import cx_Oracle as cx
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
pswd = 'ABC'
#Connect to Autonomous Data Warehouse
con = cx.connect(user = 'ADMIN', password = pswd)
query = 'SELECT * from TEST123'
data_train = pd.read_sql(query, con=con)
Ошибка:
DatabaseError: Error while trying to retrieve text for error ORA-01804
Я получаю ту же ошибку при запуске приведенного ниже кода:
...
#Connect to Autonomous Data Warehouse
con = cx.connect('ADMIN',pswd,"mltest_high")
query = 'SELECT * from TEST123'
data_train = pd.read_sql(query, con=con)
Ответ №1:
Чтобы разобраться, потребовалось много знаний, особенно когда речь шла о том, как кошельки Oracle работают встраиваемыми с файлами SLQNET.ora и TNS_NAMES.ora в сочетании с системными переменными среды, но на этом веб-сайте мой python (in .ipynb) в коде visual Studio работал для возможности подключенияс помощью облачной системы Oracle ADW. Это почти то же самое, что я сделал, чтобы заставить его работать на моей машине, но я не делал виртуальную среду. Мне пришлось разобраться с указанными выше пунктами, но вместо этого я смог использовать системную ссылку на мой кошелек для каталога.
Важно знать, что вам нужно сделать это, чтобы заставить его работать. Когда вы загружаете кошелек из ADW, вам нужно скопировать строки high / medium / low из TNS_NAMES и вставить их в ваш файл Oracle / network / admin /tns_names.ora. Вам также нужно будет взять информацию о кошельке и ssl-сервере из файла sqlnet.ora и поместить его в файл sqlnet.ora в каталоге Oracle/network/admin/. Если вы решили не использовать виртуальную среду, как показано в сообщении, чтобы заставить ссылку на каталог для информационной строки кошелька работать, вам нужно установить указанный каталог в каталог папки кошелька. Я распаковал свой; не уверен, нужен он или нет.
Наконец, вам нужно будет установить системные переменные среды для TNS_NAMES там, где находятся ваши системные файлы tns_names.ora и sqlnet.ora (не те, которые находятся в папке загрузки кошелька), вероятно, в Oracle network admin .
Ниже приведен код, который сработал для меня. Я надеюсь, что это поможет кому-то еще и что им не придется проходить через те же трудности, что и мне, чтобы разобраться в этом.
import cx_Oracle
import os
import pandas as pd
os.environ.get('TNS_ADMIN')
connection = cx_Oracle.connect('<Oracle ADW Username', '<Oracle ADW Password>', '<TNS_NAME entry (high/med/low)>')
cursor = connection.cursor()
rs = cursor.execute("SELECT * FROM TEST123")
df = pd.DataFrame(rs.fetchall())
df
Ответ №2:
Судя по номеру ошибки и факту, что текст сообщения не найден, cx_Oracle использует библиотеки Oracle Instant Client, но у вас установлена переменная среды ORACLE_HOME для какого-либо другого программного обеспечения. Если да, отключите параметр ORACLE_HOME. Или, возможно, вы используете только библиотеки, включенные в локальную установку Oracle DB, и не полностью установили переменные среды Oracle, например, не установили ORACLE_HOME. Или, возможно, вам может понадобиться более свежая версия клиентских библиотек Oracle — получите библиотеки 19c, например Oracle Instant Client. Также проверьте другие вопросы StackOverflow об ORA-1804. Если вы обновите свой вопрос информацией о том, какое программное обеспечение Oracle установлено на компьютере под управлением Python, возможно, будет получен более подробный ответ.
Похоже, у вас есть облачный кошелек, выбранный для подключения, но вот ссылки для людей, которые обращаются к этому вопросу после прочтения вашего заголовка:
-
Сообщение в блоге Как подключиться к базам данных Oracle Autonomous Cloud
-
Документация cx_Oracle Подключение к автономным базам данных
-
Документация Oracle ADW: подключение с помощью Python, Node.js , и другие языки сценариев
Комментарии:
1. Я ценю ответ Кристофера. Я действительно заинтересован в том, чтобы заставить это работать. На моем компьютере установлены только Oracle SQL Developer и виртуальная машина. Я пытался установить Oracle DB 19c, но при попытке создать БД постоянно возникают проблемы (см. Мой другой пост). Поэтому я полностью удалил ее. Я просто пытаюсь подключить python к Oracle ADW. Я разобрался с аспектом кошелька, который позволил мне подключить ADW к SQL Developer.
2. Ссылка на проблему Oracle DB 19c, если вам было любопытно: dba.stackexchange.com/q/276104/216231
3. У вас должны быть некоторые библиотеки Oracle C (например oci.dll или libclntsh.so или libclntsh.dylib), установленный в противном случае cx_Oracle не дошел бы до того, до чего он дошел. Вы установили Orcle Instant Client? oracle.com/database/technologies/instant-client.html
4. Я позволю пользователю Windows прокомментировать вопрос об установке DB.
5. Достаточно справедливо. Итак, я загрузил instant client (версия 19.8 для Win10 (x64), разархивировал его и поместил папку в указанную мной папку Oracle; установите системную переменную среды для Path, чтобы просмотреть эту папку. Я также установил Microsoft Visual Studio 2017 Redistributable. Перезагрузил компьютер, снова попробовал скрипт и все еще получаю сообщение об ошибке. Было ли что-то, что я мог пропустить?