请问一下大佬,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))
来登录
1
iqxd 2020-10-14 15:01:56 +08:00
tnsname.ora 本身是一个文本文件,打开就可以看到 Dbname,IP,port,然后再用 connect 方法连接就行了.
|
2
Alias4ck 2020-10-14 15:12:43 +08:00
你说的是类似与 plsql 这种 利用 tnsnames.ora 登录? 其实不就是读取配置文件吗。你把参数写在一个配置文件里面 去读不就行了。
|
3
iqxd 2020-10-14 15:14:50 +08:00
如果一定要用.ora 文件的话,可以这样试试
cx_Oracle.connect(USERNAME,password, open('path/tnsname.ora','r').read()) |
4
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 |
5
black11black 2020-10-15 01:53:01 +08:00
问个题外话,现在 py 有成熟的异步 oracle 框架了吗
|
6
18870715400 OP 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) |
7
18870715400 OP @iqxd 所需要的 tnsnames.ora 内容 和 实际配置里面的内容有些不太一样
|