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

AWS Lambda使用Boto3操作DynamoDB时出现'Attr未定义'错误求助

解决Boto3中Attr未定义的NameError错误

错误原因

你代码里使用的Attr类属于boto3.dynamodb.conditions模块,但当前代码没有导入这个模块,导致Python找不到该名称,触发NameError。

修复步骤

  1. 导入Attr类
    在代码的import区域添加一行:
from boto3.dynamodb.conditions import Attr
  1. 可选优化:利用环境变量增强灵活性
    你代码里已经定义了keytofind = os.environ.get('FILTER'),可以把硬编码的'Receiver'替换为这个变量,让筛选条件可通过环境配置动态调整。

修改后的完整代码

import json
import os
import boto3
from pprint import pprint
from boto3.dynamodb.conditions import Attr  # 新增导入语句

# Find records that has agentRole as 'Receiver'

tableName = os.environ.get('TABLE')
fieldName = os.environ.get('FIELD')
keytofind = os.environ.get('FILTER')
fieldname = "agentRole"
dbclient = boto3.resource('dynamodb')

def lambda_handler(event, context):
     
     tableresource = dbclient.Table(tableName)
     count = tableresource.item_count
     # 可选:如果要使用环境变量的筛选值,替换为下面一行
     # response = tableresource.scan(FilterExpression=Attr(fieldname).eq(keytofind))
     response = tableresource.scan(FilterExpression=Attr('agentRole').eq('Receiver'))
     # 建议添加返回结果的逻辑,比如返回响应内容
     return {
         'statusCode': 200,
         'body': json.dumps(response['Items'])
     }

额外说明

  • Attr是Boto3提供的条件构造器,用于构建DynamoDB的筛选/查询表达式,必须从boto3.dynamodb.conditions导入才能使用。
  • 如果你不需要硬编码字段名,也可以用代码里定义的fieldname变量替换'agentRole',进一步提升代码可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:50:23