Python-sqlalchemy-oracle连接无法连接到SID
我正在尝试使用sqlalchemy连接到oracle数据库。我期待下面的工作,因为它似乎确切的语法显示在 但这会导致错误: dsn=self.dbapi.makedsnurl.host,端口,**makedsn_kwargs TypeError:makedsn不接受关键字参数 以下调用最初在没有服务名称的情况下工作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') 但在尝试连接时失败,并出现错误,抱怨未
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示例。如果我使用完全相同的示例,则会产生相同的错误。