【问题标题】:How to connect to oracle 11g (11.2.0.3.0) database using python 3.6如何使用 python 3.6 连接到 oracle 11g (11.2.0.3.0) 数据库
【发布时间】:2018-02-13 22:05:35
【问题描述】:
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 是否需要支持驱动程序等。任何帮助将不胜感激。

【问题讨论】:

  • Python 和 Java 是不同的语言,不能在 python 中使用 JDBC。请查看 github 中的 cx_Oracle 文档和示例。 cx-oracle.readthedocs.io/en/latest/…
  • 感谢您推荐文档。以下代码解决了我的问题。 conn_str = cx_Oracle.connect("userid/password@server:port/tns_name")

标签: python-3.x oracle11g database-connection ora-12154


【解决方案1】:

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

查看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))))"

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

【讨论】:

  • 上周我一直在尝试解决这个问题,最终得到了上述文档中建议的解决方案。我分解了复杂的连接语句,发现其中一个主机不再工作,这引发了错误 ORA:12154 并且我遵循的语法也导致了问题。因此,经过多次试验和错误,这是我的工作连接语句 conn_str = cx_Oracle.connect("userid/password@server:port/tns_name")
  • 谢谢@christopher Jones
猜你喜欢
  • 1970-01-01
  • 2013-11-24
  • 2014-04-22
  • 1970-01-01
  • 2013-06-10
  • 2021-01-14
  • 2011-05-21
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多