我试图用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?
答案 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)