Python sqlalchemy无法连接,但cx_oracle成功
我正在尝试用Python连接到oracle服务器。我已经在cx_Oracle中实现了这一点,但当我尝试使用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
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)
。让我知道它是否有效,我将编辑我的答案。它有效!非常感谢你。更新答案,我将投票并接受它