Как подключиться к базе данных oracle 11g (11.2.0.3.0) с помощью python 3.6
import cx_Oracle
print('connection start')
db_connection = cx_Oracle.connect("jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <Host1>)(PORT = <port_number>)) (ADDRESS = (PROTOCOL = TCP)(HOST = <Host2>)(PORT = <port_number>)) (FAILOVER=true)(LOAD_BALANCE=true) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <service_name>) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))", "<username>", "<password>")
print(db_connection)
print('connection successful')
Я пытаюсь подключиться к базе данных Oracle 11g, используя Python 3.6.1 (Anaconda 4.4 dist), но я сталкиваюсь со следующей ошибкой.
DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified
Я могу успешно подключиться к той же базе данных Oracle 11g с помощью Oracle-SQL-Developer версии 17 (с той же строкой подключения).
Итак, мне интересно, если есть какие-либо проблемы с моим кодом или CX_Oracle нуждается в поддержке драйверов и т. Д. Любая помощь будет высоко ценится.
1 ответ
Python cx_Oracle основан на C (как PHP OCI8, Node.js Node-Oracledb, Ruby's Ruby-OCI8 и т. Д.) И использует другой синтаксис соединения с JDBC (или SQL Developer - который основан на Java), как сказал @Baski.
Взгляните на https://github.com/oracle/node-oracledb/blob/v2.0.13-dev/doc/api.md#connectionstrings где показаны различные способы подключения, такие как: синтаксис Easy Connect, имена сетевых служб, и полные встроенные строки. Есть даже раздел об изменении строк соединения JDBC на строки, используемые языками на основе Си.
В вашем случае ваша строка подключения cx_Oracle будет выглядеть примерно так:
"(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <Host1>)(PORT = <port_number>)) (ADDRESS = (PROTOCOL = TCP)(HOST = <Host2>)(PORT = <port_number>)) (FAILOVER=true)(LOAD_BALANCE=true) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <service_name>) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))"
(Почему так много попыток?)