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

Python无法连接Oracle求助:已准备cx_Oracle本地连接所需信息

解决cx_Oracle连接本地Oracle数据库的问题

我之前也碰到过类似的cx_Oracle连接本地Oracle的坑,结合你已经获取的信息,给你整理几个关键步骤和排查点,应该能帮你搞定:

一、先确认核心信息的准确性

  • 本地IP:你用socket.gethostbyname(socket.gethostname())获取的IP可能会踩坑——比如电脑开了VPN、WSL或者虚拟网卡时,这个命令可能返回非物理网卡的IP。不如直接用127.0.0.1或者localhost,本地回环地址更稳定。
  • 端口:1521是Oracle默认端口,只要listener.ora里配置的是这个就没问题。保险起见,你可以打开命令行执行lsnrctl status,看输出里的「Listening Endpoints Summary」部分,确认存在(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=你的IP)(PORT=1521)))这样的内容,说明监听在正常运行。
  • SID:你没提到怎么获取SID,这里补个关键步骤:登录Oracle数据库执行SELECT instance_name FROM v$instance;就能拿到,或者去看init.ora/spfile配置文件里的instance_name参数。

二、正确的连接代码示例

import cx_Oracle

# 方式1:用SID连接(最常用)
dsn = cx_Oracle.makedsn("127.0.0.1", 1521, sid="你的SID")
# 替换成你的数据库用户名和密码
connection = cx_Oracle.connect(user="your_username", password="your_password", dsn=dsn)

# 方式2:如果用服务名(部分场景下SID和服务名不同)
# dsn = cx_Oracle.makedsn("127.0.0.1", 1521, service_name="你的服务名")
# connection = cx_Oracle.connect("your_username/your_password@//127.0.0.1:1521/你的服务名")

# 测试连接是否成功
cursor = connection.cursor()
cursor.execute("SELECT * FROM dual")
row = cursor.fetchone()
print("连接成功!测试结果:", row)

# 用完记得关闭资源
cursor.close()
connection.close()

三、常见坑点排查

  • 监听服务是否启动:Windows下可以去服务列表找「OracleOraDB12Home1TNSListener」(名字因版本略有差异),确认它是运行状态;或者命令行执行lsnrctl start手动启动监听。
  • 防火墙拦截:本地防火墙可能会挡1521端口的连接,建议先临时关闭防火墙试试,或者在防火墙规则里添加允许Oracle监听的入站规则。
  • 版本兼容性:cx_Oracle需要搭配对应版本的Oracle Instant Client,比如你的数据库是12c,就下载12c的Instant Client。还要记得把Instant Client的路径添加到系统PATH里,或者在代码里指定:
    cx_Oracle.init_oracle_client(lib_dir="C:\\app\\instantclient_12_2")
    
  • 用户名密码正确性:确保用的是有连接权限的用户(比如system、sys或者你自己创建的用户),注意密码大小写(如果Oracle开启了大小写区分的话)。

内容的提问来源于stack exchange,提问作者YQ.Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:38:08