cx_Oracle&远程连接到Oracle DB

时间:2008-10-29 01:14:21

标签: cx-oracle

如何通过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()

6 个答案:

答案 0 :(得分:54)

我喜欢这样做:

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 :(得分:27)

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

import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)
  • “server”是服务器,如果需要,还可以是IP地址。
  • “1521”是数据库正在侦听的端口。
  • “orcl”是实例(或数据库服务)的名称。

答案 2 :(得分:6)

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)

答案 3 :(得分:1)

您可以创建dsn和connect via service_name,而不是指定SID,而不是:

import cx_Oracle
ip = '192.168.0.1'
port = 1521
service_name = 'my_service'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)

db = cx_Oracle.connect('user', 'password', dsn)

使用服务名称而不是特定实例标识符(SID)的好处是,它也可以在RAC环境中工作(使用SID赢得了&t;)。此参数自cx_Oracle version 5.1.1(2011年8月28日)

起提供

答案 4 :(得分:0)

RunShellScriptAsync()

答案 5 :(得分:-1)

import cx_Oracle
ip = '172.30.1.234'
port = 1524
SID = 'dev3'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

conn = cx_Oracle.connect('dbmylike', 'pass', dsn_tns)
print conn.version
conn.close()