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

如何使用Python的oracledb实现类似VBA的无DSN Oracle连接?

在Python的oracledb库中实现无DSN的Oracle连接

oracledb库支持无DSN连接,提供两种运行模式(薄模式、厚模式)适配不同场景,以下是具体实现方式:

薄模式(默认,无需Oracle客户端)

薄模式是oracledb的默认运行模式,无需安装Oracle客户端即可完成连接,有两种常用的无DSN连接方式:

方式1:简洁的主机+端口+服务名格式

直接通过host:port/service_name格式的字符串作为DSN参数:

import oracledb

# 建立无DSN连接
conn = oracledb.connect(
    user="fake_user",
    password="fake_password",
    dsn="your_host:1521/your_service_name"
)

方式2:完整的TNS描述符

如果需要复杂配置(如多地址、负载均衡),可以直接传入和VBA中DBQ参数格式一致的TNS描述字符串(即tnsping返回的内容):

import oracledb

# 替换为实际的tnsping返回字符串
tns_string = """(DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=your_host)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=your_service_name))
)"""

conn = oracledb.connect(
    user="fake_user",
    password="fake_password",
    dsn=tns_string
)

厚模式(依赖Oracle客户端)

如果需要和VBA的实现逻辑更贴近(依赖Oracle客户端驱动),可以使用oracledb的厚模式:

import oracledb

# 初始化厚模式,替换为你的Oracle客户端库路径
oracledb.init_oracle_client(lib_dir="C:\\Oracle\\OraClient21Home1\\bin")  # Windows示例
# oracledb.init_oracle_client(lib_dir="/usr/lib/oracle/21/client64/lib")  # Linux示例

# 使用tnsping返回的字符串建立连接
conn = oracledb.connect(
    user="fake_user",
    password="fake_password",
    dsn="<<string_returned_from_tnsping>>"
)

注意事项

  • 薄模式无需Oracle客户端,部署更轻便,推荐优先使用
  • 厚模式需要安装对应版本的Oracle客户端,适合需利用客户端高级特性的场景
  • 连接使用完毕后,记得调用conn.close()关闭连接

内容的提问来源于stack exchange,提问作者Z T Minhas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:02:43