Python 登录 oracle 的问题

2020-10-14 14:47:16 +08:00
 18870715400

请问一下大佬,python 的 cx_Oracle 登录 oracle 需要客户端, 那么如何通过 tnsname.ora 的方式来登录 oracle 数据库呢, 也就是数据库机器的 ip 和端口放在 tnsname.ora 中, 而不是通过这种cx_Oracle.connect(config.USERNAME, self.password, "{ip}:{port}/{db}".format(ip=config.IP, port=config.PORT, db=config.DB)) 来登录

1838 次点击
所在节点    Python
7 条回复
iqxd
2020-10-14 15:01:56 +08:00
tnsname.ora 本身是一个文本文件,打开就可以看到 Dbname,IP,port,然后再用 connect 方法连接就行了.
Alias4ck
2020-10-14 15:12:43 +08:00
你说的是类似与 plsql 这种 利用 tnsnames.ora 登录? 其实不就是读取配置文件吗。你把参数写在一个配置文件里面 去读不就行了。
iqxd
2020-10-14 15:14:50 +08:00
如果一定要用.ora 文件的话,可以这样试试

cx_Oracle.connect(USERNAME,password, open('path/tnsname.ora','r').read())
krixaar
2020-10-14 17:36:36 +08:00
connect 的第三个参数本来就可以用 tnsnames.ora 啊,比如里面有个 TEST.DB ,那么第三个参数直接写'TEST.DB'就连上了。

文档:
https://cx-oracle.readthedocs.io/en/latest/user_guide/connection_handling.html#net-service-names-for-connection-strings
black11black
2020-10-15 01:53:01 +08:00
问个题外话,现在 py 有成熟的异步 oracle 框架了吗
18870715400
2020-10-15 09:25:54 +08:00
TNS = """(DESCRIPTION=
(FAILOVER=on)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.157.22)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.157.21)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME={SERVER_NAME})))"""

conn = cx_oracle.connect(username, password, TNS)
18870715400
2020-10-15 09:28:26 +08:00
@iqxd 所需要的 tnsnames.ora 内容 和 实际配置里面的内容有些不太一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX