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

Sqlalchemy搭配python-oracledb异常:需指定tnsnames.ora目录

解决oracledb连接时提示"no configuration directory to search for tnsnames.ora"的问题

先搞懂tnsnames.ora是什么

tnsnames.ora是Oracle客户端的配置文件,用来存储数据库连接别名——把冗长的数据库地址、端口、服务名等信息映射成一个简短的别名,方便后续用别名快速连接数据库。

找到tnsnames.ora的默认位置

Windows系统

  • 完整Oracle客户端:默认路径是%ORACLE_HOME%\network\admin,命令行输入echo %ORACLE_HOME%可查看ORACLE_HOME路径。
  • Oracle Instant Client:需在解压后的Instant Client目录下手动创建network\admin文件夹(例如C:\instantclient_21_11\network\admin)。

Linux/macOS系统

  • 完整Oracle客户端:默认路径是$ORACLE_HOME/network/admin,终端输入echo $ORACLE_HOME可查看路径。
  • Oracle Instant Client:默认路径为/usr/lib/oracle/<version>/client64/lib/network/admin(替换<version>为你的Instant Client版本),也可在用户主目录下创建~/network/admin目录。

配置tnsnames.ora

  1. 确认network/admin目录存在,不存在则手动创建。
  2. 在该目录下新建tnsnames.ora文件,写入以下格式内容(替换占位符为你的数据库实际信息):
MY_DB_ALIAS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 你的数据库IP或域名)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 你的数据库服务名)
    )
  )

让oracledb识别到配置

方法1:设置TNS_ADMIN环境变量

  • Windows:命令行临时设置set TNS_ADMIN=C:\path\to\network\admin,或在「系统属性-高级-环境变量」中添加永久环境变量。
  • Linux/macOS:终端临时设置export TNS_ADMIN=/path/to/network/admin,或把该行添加到~/.bashrc、~/.zshrc文件实现永久生效。

方法2:直接使用完整连接字符串(跳过tnsnames.ora)

如果不想配置tnsnames.ora,可在代码里直接用包含数据库地址、端口、服务名的连接字符串,示例如下:

oracledb.connect({
  user: '你的数据库用户名',
  password: '你的数据库密码',
  connectString: '数据库IP:1521/数据库服务名'
}, (err, connection) => {
  // 业务逻辑处理
});

这样就不会再出现找不到tnsnames.ora目录的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:22