sqlalchemy无法连接,但cx_oracle成功

Kew*_*ewl 1 python cx-oracle sqlalchemy

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

根据查询执行并从数据库返回数据。如果我尝试使用sqlalchemy进行相同的连接:

import sqlalchemy

engine = sqlalchemy.create_engine('oracle+cx_oracle://' + user + ':' + pw + '@' + host + ':' + port + '/' + db)
sqlalchemy_connection = engine.connect()
Run Code Online (Sandbox Code Playgroud)

我在最后一行收到错误:

DatabaseError:(cx_Oracle.DatabaseError)ORA-12505:TNS:listener当前不知道连接描述符中给出的SID(有关此错误的背景,网址为:http : //sqlalche.me/e/4xp6

知道是什么问题吗?sqlalchemy不只是使用cx_Oracle吗?有什么解决方法可以将cx_Oracle连接赋予sqlalchemy吗?

Scr*_*urr 7

根据文档,使用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)
Run Code Online (Sandbox Code Playgroud)