Python sqlalchemy无法连接,但cx_oracle成功

Python sqlalchemy无法连接,但cx_oracle成功,python,sqlalchemy,cx-oracle,Python,Sqlalchemy,Cx Oracle,我正在尝试用Python连接到oracle服务器。我已经在cx_Oracle中实现了这一点,但当我尝试使用sqlalchemy进行连接时,它失败了。cx_Oracle代码: import cx_Oracle import pandas as pd cx_connection = cx_Oracle.connect(user+'/' + pw + '@' + host + ':' + port + '/' + db) df = pd.read_sql(my_query, cx_connectio

我正在尝试用Python连接到oracle服务器。我已经在cx_Oracle中实现了这一点,但当我尝试使用sqlalchemy进行连接时,它失败了。cx_Oracle代码:

import cx_Oracle
import pandas as pd

cx_connection = cx_Oracle.connect(user+'/' + pw + '@' + host + ':' + port + '/' + db)
df = pd.read_sql(my_query, cx_connection)
根据预期的查询执行并返回数据库中的数据。如果我尝试与sqlalchemy的相同连接:

import sqlalchemy

engine = sqlalchemy.create_engine('oracle+cx_oracle://' + user + ':' + pw + '@' + host + ':' + port + '/' + db)
sqlalchemy_connection = engine.connect()
我在最后一行得到一个错误:

DatabaseError:(cx_Oracle.DatabaseError)ORA-12505:TNS:listener没有 目前不知道连接描述符中给出的SID(后台 此错误位于:)

知道问题出在哪里吗?sqlalchemy不就是在使用cx_Oracle吗?是否有任何解决方法只将cx\U Oracle连接提供给sqlalchemy?

根据,您的Oracle连接字符串与sqlalchemy的格式应为
Oracle+cx_oracle://user:pass@主机:端口/dbname[?key=value&key=value…]
。但是基于您以前的连接字符串,db值实际上可能是TNS服务名称,因此在本例中,您希望使用

engine = sqlalchemy.create_engine('oracle+cx_oracle://' + user + ':' + pw + '@' + host + ':' + port + '/?service_name=' + db)

哎呀,为了简化这篇文章,我忽略了连接字符串的不同。我编辑了这个问题,以显示您的引擎创建行的问题。@Kewl好的,在本例中,查看前一个示例中的连接字符串模式,它看起来像是按照以下模式进行的:
username/password@host:端口/服务\u名称
。因此,可能的方法是在sqlalchemy中遵循以下模式:
engine=sqlalchemy.create_引擎('oracle+cx_oracle://'+user+':'+pw+'@'+host+':'+port+'/?service_name='+db)
。让我知道它是否有效,我将编辑我的答案。它有效!非常感谢你。更新答案,我将投票并接受它