1
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 是否需要支持驱动程序等。任何帮助将不胜感激。

4

1 回答 1

0

正如@Baski 所说,Python cx_Oracle 是基于 C 的(如 PHP 的 OCI8、Node.js 的 node-oracledb、Ruby 的 ruby​​-oci8 等),并使用与 JDBC(或基于 Java 的 SQL Developer)不同的连接语法。

看看https://github.com/oracle/node-oracledb/blob/v2.0.13-dev/doc/api.md#connectionstrings,它显示了各种连接方法,例如:Easy Connect 语法、网络服务名称、和完整的嵌入字符串。甚至还有一节将 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))))"

(为什么要重试这么多?)

于 2017-09-05T23:06:44.467 回答