当前位置:  开发笔记 > 编程语言 > 正文

cx_Oracle并远程连接到Oracle DB

如何解决《cx_Oracle并远程连接到OracleDB》经验,为你挑选了3个好方法。

如何通过IP地址连接到远程服务器,TOAD,SqlDeveloper只能通过IP地址,用户名,SID和密码连接到数据库?

每当我尝试指定IP地址时,它似乎都是在本地使用它.

换句话说,如何将cx_Oracle.connect()的字符串格式化为非本地数据库?

之前的帖子列为了通过cx_Oracle模块连接到Oracle的答案,其中包含以下代码:

#!/usr/bin/python

import cx_Oracle
connstr='scott/tiger'
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()

curs.execute('select * from emp')
print curs.description
for row in curs:
    print row
conn.close()

Kevin Horn.. 56

我喜欢这样做:

ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

db = cx_Oracle.connect('username', 'password', dsn_tns)

我喜欢这种方法的一个主要原因是我通常在某个地方有一个TNSNAMES.ORA文件,我可以dsn_tns通过这样做检查对象是否会做正确的事情:

print dsn_tns

并将输出与我的TNSNAMES.ORA进行比较



1> Kevin Horn..:

我喜欢这样做:

ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

db = cx_Oracle.connect('username', 'password', dsn_tns)

我喜欢这种方法的一个主要原因是我通常在某个地方有一个TNSNAMES.ORA文件,我可以dsn_tns通过这样做检查对象是否会做正确的事情:

print dsn_tns

并将输出与我的TNSNAMES.ORA进行比较


仅供参考 - 当连接到需要服务名称而不是SID的11g RAC时,这不起作用.connstr方法用作服务名称.

2> Jeffrey Kemp..:

您可以在连接字符串中指定服务器,例如:

import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)

"server"是服务器,或者IP地址(如果需要).

"1521"是数据库正在侦听的端口.

"orcl"是实例(或数据库服务)的名称.


我重新运行了数据包跟踪.使用`user/pass @ host:port/dbname`建立的连接最终使用`dbname`作为`SERVICE_NAME`而不是`SID`,在与Oracle 10g服务器通信时,Oracle InstantClient 11g无效.

3> Vlad Bezden..:
import cx_Oracle

CONN_INFO = {
    'host': 'xxx.xx.xxx.x',
    'port': 12345,
    'user': 'user_name',
    'psw': 'your_password',
    'service': 'abc.xyz.com',
}

CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)

connection = cx_Oracle.connect(CONN_STR)

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有