【发布时间】:2019-06-26 11:22:54
【问题描述】:
我使用 Toad 连接到我的 Oracle 数据库并且工作正常,但是我尝试使用 cx_Oracle 连接到同一个数据库并且我的程序卡在 .connect() 方法上。
我认为问题出在host 名称上,但我不能确定没有错误存在,只是没有通过connect() 调用。
import cx_Oracle
CONN_INFO = {'host': '\\\\SERVERNAMEUSEDINTOAD\\',
'port': 1111,
'user': 'USER123',
'psw': 'password',
'service': 'dbname.somesite.com'}
print("test1")
CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
print("test2")
con = cx_Oracle.connect(CONN_STR)
print("test3")
print(con.fetchmany([1]))
控制台:
test1
test2
我到达test2,但没有到达test3。我是否正确使用主机名?主机是网络上的内部服务器。
TOAD 应用程序只显示 SERVERNAMEUSEDINTOAD,所以我也尝试了:
'host': 'SERVERNAMEUSEDINTOAD'
但这导致了以下错误:
test1
test2
Traceback (most recent call last):
File "C:/Users/name/PycharmProjects/WorkFlow/test.py", line 12, in <module>
con = cx_Oracle.connect(CONN_STR)
cx_Oracle.DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified
【问题讨论】:
-
print(CONN_STR)而不是test2会更有趣……给出的错误表明生成的CONN_STR不是它所需要的(说明显而易见)。第一个 CONN_INFO 中的反斜杠对我来说看起来不太好……您从 Toad 获取的内容真的是服务器主机还是tnsnames.ora的 TNS 名称?看看this answer 是否能以某种方式帮助你——从那里的答案来看,如果连接数据正确,你的第二个字符串应该没问题。 -
@ShinTakezou 我也试过了,但它从不打印。就像它挂了一样。也就是说,我首先使用
makedsn()解决了这个问题,然后连接这些设置。