我在连接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,并且用它连接数据库没有任何问题。
任何想法可能是什么问题?
预先感谢
答案 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>