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

使用Python 3.9编写AWS Lambda运行Athena查询报错:name 'response' is not defined

问题解决:NameError: name 'response' is not defined

错误根源

你的代码存在变量作用域问题:response变量是在lambda_handler函数内部定义的,但你在函数外部尝试访问它——Python中函数内部定义的变量默认是局部变量,外部无法直接读取。此外代码还有两处细节错误:

  • 遍历结果时写错变量名:results应为result
  • 用time.sleep(10)等待查询完成不可靠,Athena查询耗时可能超过10秒,应该通过轮询检查查询状态来确保等待逻辑可靠

修正后的代码

import time
import boto3

# 创建Athena客户端
client = boto3.client('athena')

# 定义查询参数
query = 'select * from mydatabase.mytable limit 8'
DATABASE = 'mydatabase'
output = 's3://mybucket/'

def lambda_handler(event, context):
    # 启动查询执行
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )
    
    query_execution_id = response['QueryExecutionId']
    
    # 轮询检查查询状态,直到完成或终止
    while True:
        query_status = client.get_query_execution(QueryExecutionId=query_execution_id)
        status = query_status['QueryExecution']['Status']['State']
        if status in ['SUCCEEDED', 'FAILED', 'CANCELLED']:
            break
        time.sleep(2)  # 每2秒检查一次状态
    
    if status == 'SUCCEEDED':
        # 获取并遍历查询结果
        result = client.get_query_results(QueryExecutionId=query_execution_id)
        for row in result['ResultSet']['Rows']:
            print(row)
        return {
            'statusCode': 200,
            'body': '查询执行成功'
        }
    else:
        error_msg = query_status['QueryExecution']['Status'].get('StateChangeReason', '未知错误')
        print(f"查询失败: {error_msg}")
        return {
            'statusCode': 500,
            'body': f'查询失败: {error_msg}'
        }

关键修正说明

  1. 修复作用域问题:将所有依赖response的逻辑(获取执行ID、等待查询、读取结果)全部移入lambda_handler函数内部,确保能正常访问局部变量response
  2. 替换不可靠等待:用轮询方式检查Athena查询状态,只有当查询进入终止状态时才继续执行,避免因查询超时导致的结果读取失败
  3. 修正变量名错误:将遍历结果时的results改为result,与定义的变量名保持一致
  4. 增强错误处理:增加查询状态判断,失败时返回具体错误信息,提升函数的鲁棒性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:35:18