使用Python连接AWS上的Oracle SQL:host与service_name配置疑问
解决AWS Oracle数据库连接的host与service_name取值问题
1. 如何获取host值
- 直接用AWS RDS Oracle实例的**端点(Endpoint)**就行。打开AWS控制台的RDS服务,找到你的Oracle实例,进入"连接与安全性"标签页,复制完整的端点地址填到host变量里。
2. 如何获取service_name值
- AWS RDS Oracle的service_name固定格式是:
[你的数据库名称].[实例所在AWS区域].rds.amazonaws.com- 数据库名称是你创建实例时指定的DB名称,在RDS控制台的"配置"标签里能找到
- 区域比如是
us-east-1、ap-southeast-1这类,同样在实例详情里能看到
- 也可以用SQL查询验证:成功连接数据库后执行
SELECT sys_context('userenv','service_name') FROM dual;,就能拿到准确的service_name
修正后的Python连接脚本
import cx_Oracle # 替换为你的实际信息 username = '数据库用户名' password = '数据库密码' host = 'xxx.xxx.xxx.xxx.us-east-1.rds.amazonaws.com' # 复制RDS实例端点 port = '1521' # Oracle默认端口,若修改过则填新端口 service_name = 'mydb.us-east-1.rds.amazonaws.com' # 按格式拼接或查询得到 dsn = cx_Oracle.makedsn(host, port, service_name=service_name) try: connection = cx_Oracle.connect(username, password, dsn) cursor = connection.cursor() query = "SELECT * FROM your_table" cursor.execute(query) for row in cursor: print(row) finally: # 确保资源正确释放 if 'cursor' in locals() and cursor: cursor.close() if 'connection' in locals() and connection: connection.close()
额外注意事项
- 检查你的机器(本地/EC2)的安全组规则,是否允许访问RDS实例的对应端口(默认1521)
- 用户名是创建Oracle实例时设置的主用户名,不是你的AWS账号用户名
内容的提问来源于stack exchange,提问作者Lunarlife
相关产品推荐
相关产品推荐

