我有一个连接字符串长这样
con_str = "myuser/mypass@oracle.sub.example.com:1521/ora1"
在这里,ora1
是我的数据库的SID。在SQL开发人员中使用此信息可以正常工作,这意味着我可以连接并查询而无需遇到问题。
然而,如果我尝试使用此字符串连接Oracle,则会失败。
cx_Oracle.connect(con_str)
DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
如果ora1是一个服务名,那么这个连接字符串格式就可行。
我看到其他问题似乎与我的问题相反(它使用SID工作,但不使用服务名)
连接Oracle的正确方法是什么,如何使用cx_Oracle
使用SID
而不是服务名? 如何在不需要调整TNSNAMES.ORA
文件的情况下完成此操作? 我的应用程序分发给许多内部用户,当处理没有管理员权限的Windows机器上的用户时,更改TNSNAMES
文件不理想。 此外,当我使用服务名时,我根本不需要触摸此文件,并希望保持这种状态。
service_name
明确区分第三个参数(即sid
),执行以下命令:cx_Oracle.makedsn("oracle.sub.example.com", "1521", service_name="ora1")
。 - dmvianna