NoSuchModuleError:无法加载插件:sqlalchemy.dialects:oracle.oracledb

Thu*_*oud 3 python oracle sqlalchemy python-oracledb

当我尝试使用 SQLAlchemy 连接 Oracle 服务器时。我收到这个错误。

NoSuchModuleError:无法加载插件:sqlalchemy.dialects:oracle.oracledb

from sqlalchemy.engine import create_engine

DIALECT = 'oracle'
SQL_DRIVER = 'oracledb'
USERNAME = 'username' #enter your username
PASSWORD = 'password' #enter your password
HOST = 'host url' #enter the oracle db host url
PORT = 1533 # enter the oracle port number
SERVICE = 'service name' # enter the oracle db service name
ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE

engine = create_engine(ENGINE_PATH_WIN_AUTH)


#test query
import pandas as pd
test_df = pd.read_sql_query('SELECT * FROM global_name', engine)
Run Code Online (Sandbox Code Playgroud)

有什么不同的连接方法吗?

Chr*_*nes 9

为了完整起见(因为答案已经在注释中):使用 SQLAlchemy 1.4 将其添加到您的顶级脚本文件中:

import sys
import oracledb
oracledb.version = "8.3.0"
sys.modules["cx_Oracle"] = oracledb
Run Code Online (Sandbox Code Playgroud)

然后像使用 cx_Oracle 一样继续操作。应该这样create_engine()开始oracle:

# SQLAlchemy 1.4 with python-oracledb or cx_Oracle
engine = create_engine('oracle://...
Run Code Online (Sandbox Code Playgroud)

sys.modulesSQLAlchemy 2.0 不需要 etc 片段。这个版本create_engine()应该以oracle+oracledb:如下开头:

import oracledb

# SQLAlchemy 2.0 with python-oracledb
engine = create_engine('oracle+oracledb://...
Run Code Online (Sandbox Code Playgroud)

这些帖子是很好的参考: