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')我正在尝试使用python 3.6.1 (Anaconda 4.4 dist)连接到oracle 11g数据库,但我遇到了以下错误。
DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified我可以使用Oracle-SQL-Developer版本17 (使用相同的连接字符串)成功连接到相同的oracle 11g数据库。
所以,我想知道我的代码是否有任何问题,或者cx_Oracle是否需要支持驱动程序等。任何帮助都将非常感谢。
发布于 2017-09-06 07:06:44
Python是基于C语言的(像PHP的OCI8,node.js的node-oracledb,ruby的ruby-oci8等等),并使用不同的连接语法到JDBC (或SQL Developer -基于Java ),就像@Baski所说的那样。
看一看https://github.com/oracle/node-oracledb/blob/v2.0.13-dev/doc/api.md#connectionstrings,它显示了各种连接方法,比如:简单连接语法、网络服务名称和完整的嵌入式字符串。甚至有一节介绍如何将JDBC连接字符串更改为可由基于C的语言使用的字符串。
在您的示例中,您的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))))"(为什么要重试这么多次?)
https://stackoverflow.com/questions/46057868
复制相似问题