使用cx_Oracle

时间:2020-09-09 10:37:32

标签: python database oracle connection cx-oracle

我在连接remote Oracle DB using cx_Oracle中的python application时遇到问题。 我已经尝试了很多基于Google搜索等方法来配置/构造我的连接字符串的不同方法,但是无论我如何尝试,几乎每次都会收到相同的错误消息。

我的尝试如下:

import cx_Oracle
ip = '[IP ADDRESS]'
port = [PORT]
service_name = '[SERVICE NAME]'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)
db = cx_Oracle.connect('[USERNAME]', '[PASSWORD], dsn)

结果:数据库错误:ORA-12170:TNS:发生连接超时

import cx_Oracle
conn_str = '[USERNAME]/[PASSWORD]@[HOST IP]/[SERVICE NAME]'
conn = cx_Oracle.connect(conn_str)

结果:数据库错误:ORA-12170:TNS:发生连接超时

import cx_Oracle
user= '[USERNAME]'
pwd = '[PASSWORD]'
host = '[HOST IP]' 
service_name = '[SERVICE NAME]'
portno = '[PORT]' 
conn = cx_Oracle.connect(user, pwd, '{}:{}/{}'.format(host,portno,service_name))

结果:数据库错误:ORA-12170:TNS:发生连接超时

import cx_Oracle
connstr = '[USERNAME]/[PASSWORD]@[SERVICE NAME]'
conn = cx_Oracle.connect(connstr)

结果:数据库错误:ORA-12154:TNS:无法解析指定的连接标识符

我已经在PC上安装了Toad,并且用它连接数据库没有任何问题。

任何想法可能是什么问题?

预先感谢

1 个答案:

答案 0 :(得分:0)

我有这种标准的连接方式

import cx_Oracle
    
host="myserver"
port=myport
sid='myservicename'
user='myuser'
password='mypassword'
sid = cx_Oracle.makedsn(host, port, service_name=sid)

connection = cx_Oracle.connect(user, password, sid, encoding="UTF-8")
cursor = connection.cursor()
cursor.execute('select 1 from dual')

它可以正常工作。在您的情况下,发生超时很奇怪,它通常表示网络问题而不是连接问题。如果您使用的是cx_Oracle版本8,则无需将编码指定为UTF-8,因为它是默认编码。

查看其工作原理。

C:\python>type testconn.py
#from __future__ import print_function  # needed for Python 2.7
import cx_Oracle
import os

host="myserver"
port=myport
sid='database_service_name'
user='myuser'
password='mypassword'
sid = cx_Oracle.makedsn(host, port, service_name=sid)

connection = cx_Oracle.connect(user, password, sid, encoding="UTF-8")
cursor = connection.cursor()
cursor.execute('select 1 from dual')

for row in cursor:
    print(row)


C:\python>python testconn.py
(1,)

C:\python>
相关问题