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
- 确认
network/admin目录存在,不存在则手动创建。 - 在该目录下新建
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
相关产品推荐
相关产品推荐

