sqlalchemy无法连接但cx_oracle成功

时间:2018-02-23 16:11:02

标签: 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_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(背景信息)   此错误发生在:http://sqlalche.me/e/4xp6

知道问题是什么吗?仅使用cx_Oracle是不是sqlalchemy?是否有任何解决方法只是将cx_Oracle连接提供给sqlalchemy?

1 个答案:

答案 0 :(得分:5)

根据doc,使用SQLAlchemy的Oracle连接字符串的格式应为oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]。但是根据以前的连接字符串,db值实际上可能是TNS服务名称,因此在这种情况下,您要使用

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