Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-sqlalchemy-oracle连接无法连接到SID_Python_Sqlalchemy_Cx Oracle - Fatal编程技术网

Python-sqlalchemy-oracle连接无法连接到SID

Python-sqlalchemy-oracle连接无法连接到SID,python,sqlalchemy,cx-oracle,Python,Sqlalchemy,Cx Oracle,我正在尝试使用sqlalchemy连接到oracle数据库。我期待下面的工作,因为它似乎确切的语法显示在 但这会导致错误: dsn=self.dbapi.makedsnurl.host,端口,**makedsn_kwargs TypeError:makedsn不接受关键字参数 以下调用最初在没有服务名称的情况下工作 oracle_db = sqlalchemy.create_engine('oracle://user:pass@server:1521') 但在尝试连接时失败,并出现错误,抱怨未

我正在尝试使用sqlalchemy连接到oracle数据库。我期待下面的工作,因为它似乎确切的语法显示在

但这会导致错误:

dsn=self.dbapi.makedsnurl.host,端口,**makedsn_kwargs TypeError:makedsn不接受关键字参数

以下调用最初在没有服务名称的情况下工作

oracle_db = sqlalchemy.create_engine('oracle://user:pass@server:1521')
但在尝试连接时失败,并出现错误,抱怨未提供服务名称

ORA-12504:TNS:listener在CONNECT_数据中未指定服务_名称

奇怪的是,这直接适用于cx_Oracle:

con = cx_Oracle.connect('user/pass@server:1521/dev')
我应该如何连接到特定服务

尝试

我曾尝试从显式使用cx_Oracle.makedsn,但也没有成功

试图使用?连接字符串中的选项

oracle_db = sqlalchemy.create_engine('oracle://user:pass@server:1521/?sid=dev')

最初可以工作,但当我尝试oracle_db.connect时,我会遇到上面显示的相同ORA-12504错误。

根据的文档,您可能应该使用cx_oracle引擎。连接字符串为:

oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
具有服务名称或sid选项,如下所示:

oracle+cx_oracle://user:pass@host:1521/?service_name=hr
oracle+cx_oracle://user:pass@host:1521/?sid=hr

根据上的文档,您可能应该使用cx_oracle引擎。连接字符串为:

oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
具有服务名称或sid选项,如下所示:

oracle+cx_oracle://user:pass@host:1521/?service_name=hr
oracle+cx_oracle://user:pass@host:1521/?sid=hr

尝试使用此连接字符串:

engine = create_engine("oracle+cx_oracle://<username>:<password>@(DESCRIPTION = (LOAD_BALANCE=on) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = <host>)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = devdb)))") 

它对我起作用。

尝试使用此连接字符串:

engine = create_engine("oracle+cx_oracle://<username>:<password>@(DESCRIPTION = (LOAD_BALANCE=on) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = <host>)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = devdb)))") 

这对我很有效。

我尝试了两种方法,第一种方法导致TypeError:makedsn不接受关键字参数,第二种方法导致相同的错误,即不提供服务名称错误`当尝试连接时,您可能会尝试使用tns\U名称条目。试试看:[例如,tns_名称可能有效,但我没有现成的名称。我不明白为什么直接到cx_Oracle的几乎相同的字符串有效,但在通过sqlalchemy时无效。也许这是您的答案几乎相同?两者之间有什么区别?为什么不使用相同的字符串?因为语法不同htly根据文档。请参阅我上面包含的cx\u Oracle示例。如果我使用完全相同的名称,则会产生相同的错误。我尝试了这两种方法,第一种方法导致TypeError:makedsn不带关键字参数,第二种方法导致相同的错误,即“未提供服务名称错误”`当尝试连接时,您实际上可能会尝试使用tns\u名称条目。T请看:[例如,tns_名称可能有效,但我没有现成的名称。我不明白为什么直接到cx_Oracle的几乎相同的字符串有效,但在通过sqlalchemy时无效。也许这是您的答案几乎相同?两者之间有什么区别?为什么不使用相同的字符串?因为语法不同htly根据文档。请参阅我上面包含的cx_Oracle示例。如果我使用完全相同的示例,则会产生相同的错误。