如何使用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
相关产品推荐
相关产品推荐

