You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的SQLAlchemy库连接Oracle数据库?

Python使用SQLAlchemy连接Oracle数据库排查步骤

1 修复现有代码语法错误

你提供的代码存在两处基础语法错误,会直接导致运行失败:

  • 导入语句拆分错误:from sqlalchemy 和 import create_engine 被错误拆分为两行,必须合并为一行 from sqlalchemy import create_engine
  • 连接串拼接错误:ENGINE_PATH_WIN_AUTH 变量的字符串末尾未闭合,且缺少必填的Oracle服务名/SID配置

2 前置环境校验

先排除依赖、网络、账号权限问题:

  • 验证cx_Oracle依赖:cx_Oracle需要本地安装对应版本的Oracle Instant Client,且安装路径要加入系统环境变量PATH,注意32/64位必须和Python版本、Oracle服务端版本匹配
  • 验证网络连通:本地运行命令 telnet 123.123.123.123 1521 测试端口连通性,不通的话先排查防火墙、网络策略
  • 验证账号权限:用PL/SQL Developer、Navicat等数据库工具,使用相同的账号密码、IP、端口、服务名测试连接,确认账号未锁定、有目标库访问权限

3 连接串规范配置

根据你使用的是服务名还是SID,选择对应格式的连接串:

  • 使用SERVICE_NAME连接:oracle+cx_oracle://{用户名}:{密码}@{IP}:{端口}/?service_name={你的服务名}
  • 使用SID连接:oracle+cx_oracle://{用户名}:{密码}@{IP}:{端口}/{你的SID}

注意:如果账号密码包含@、%等特殊字符,需要先做URL编码,避免连接串解析错误


4 常见异常处理

  • 报错ORA-12514 TNS:listener does not currently know of service requested in connect descriptor:检查填写的服务名/SID是否正确
  • 报错ORA-12170: TNS:Connect timeout occurred:检查IP、端口是否正确,网络是否通
  • 报错cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library:检查Oracle Instant Client是否安装、路径是否配置正确、版本位数是否匹配

修正后可运行代码示例

from sqlalchemy import create_engine
import cx_Oracle
import pandas as pd

DIALECT = 'oracle'
SQL_DRIVER = 'cx_oracle'
USERNAME = 'username' # 替换为实际用户名
PASSWORD = 'password' # 替换为实际密码
HOST = '123.123.123.123' # 替换为实际数据库IP
PORT = 1521 # 替换为实际端口
SERVICE_NAME = 'orcl' # 替换为实际服务名,用SID的话修改下方连接串格式

# 拼接连接串
ENGINE_PATH = f"{DIALECT}+{SQL_DRIVER}://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/?service_name={SERVICE_NAME}"
engine = create_engine(ENGINE_PATH)

# 测试查询
test_df = pd.read_sql_query('SELECT * FROM global_name', engine)
print(test_df)

内容的提问来源于stack exchange,提问作者pakwai122

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:54:05