使用EZConnect语法时出现Python ORA-12504错误

使用EZConnect语法时出现Python ORA-12504错误,python,oracle,Python,Oracle,我正在使用python Oracle驱动程序和Easy Connection语法,但收到一个错误: DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor import cx_Oracle as cx_Oracle def query_route(): con = cx_Oracle.connect('user/pwd@10.1.

我正在使用python Oracle驱动程序和Easy Connection语法,但收到一个错误:

DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

import cx_Oracle as cx_Oracle

def query_route():
    con = cx_Oracle.connect('user/pwd@10.1.1.24:1521/service')
服务器的版本为
11.2.0.4.0

按照下面克里斯托弗·琼斯的回答,我试着:

con = cx_Oracle("oracle+cx_oracle://user:pwd@(DESCRIPTION = (LOAD_BALANCE=on) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.24)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service)))")
它失败了,出现了相同的错误

我找到了一个链接,但我正在使用斜杠后的服务

我做错了什么

更新:正如ChristoperJones所说,问题在于服务名称,我的错误是假设我知道如何确定它。我从jdbc数据源复制了:

jdbc:oracle:thin:@10.1.1.24:1521:foo
但是,在python代码中,我需要使用:

mgowner/mgowner@10.1.1.24/foo.mycompany.com

主机名和端口部分没有问题:您正在进入Oracle网络侦听器。您可能需要在托管数据库的计算机上运行
lsnrctl status
,或者(作为特权用户)在SQL*Plus中执行
show parameter service_names
,从而找到正确的服务名称。如果您有PDB,请查询其中一个PDB视图


如果您的数据库非常旧,它可能使用SID,而不是服务名称,因此您必须构造长连接字符串,如
“(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.24)(PORT=1521))(CONNECT_DATA=(SID=whatever)))

主机名和端口部分正常:您正在接通Oracle网络侦听器。您可能需要在托管数据库的计算机上运行
lsnrctl status
,或者(作为特权用户)在SQL*Plus中执行
show parameter service_names
,从而找到正确的服务名称。如果您有PDB,请查询其中一个PDB视图


如果您的数据库非常旧,它可能使用SID,而不是服务名称,因此您必须构造长连接字符串,如
“(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.24)(PORT=1521))(CONNECT_DATA=(SID=whatever)))

在您的
tnsnames.ora
文件中,您的
service\u name
参数可能很长,带有点,例如
mydb.mycomp.com
,然后用这个长点描述替换
service
关键字。巴巴拉斯:我相信这是在没有tnsnames.ora文件的情况下使用的格式。我错了吗?不,我不是指完整的描述,从你的编辑中,我看到了忘记我的评论:),因为你的服务名称只是
service
(不像
service.mycompany.com.us
)在您的
tnsnames.ora
文件中,您的
service\u name
参数可能是长的,带有点,例如
mydb.mycomp.com
,然后将
service
关键字替换为长点描述。巴巴拉斯:我相信这是在没有tnsnames.ora文件的情况下使用的格式。我错了吗?不,我不是指这个完整的描述,从你的编辑中,我看到了忘记我的评论:),因为你的服务名只是
service
(不像
service.mycompany.com.us
),我已经更新了,以显示我在哪里尝试了你的建议,以及Oracle的版本。我所知道的服务是正确的,因为我从一个可以连接的java进程的配置中复制了它。我已经进行了更新,以显示我在哪里尝试了您的建议,以及Oracle版本。我所知道的服务是正确的,因为我从可以连接的java进程的配置中复制了它。