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

使用Boto3扫描DynamoDB触发ValidationException错误求助

解决DynamoDB Scan操作的ValidationException错误

错误原因

你传入了ExpressionAttributeNames和ExpressionAttributeValues参数,但没有指定对应的表达式参数(比如FilterExpression)。DynamoDB要求这两个属性必须配合表达式使用,否则会触发验证错误。

修正方案

方案1:使用Boto3条件构造器(推荐,简洁易读)

利用Attr构造过滤表达式,Boto3会自动处理属性名和值的映射,无需手动指定ExpressionAttributeNames和ExpressionAttributeValues:

import boto3
import pprint
from boto3.dynamodb.conditions import Attr

dbresource = boto3.resource('dynamodb')

def lambda_handler(event, context):
    tableobject = dbresource.Table('basicSongsTable')
    response = tableobject.scan(
        FilterExpression=Attr('artist').eq('Matt')
    )
    pprint.pprint(response)

方案2:手动指定表达式参数(适合复杂场景)

如果需要用占位符处理保留字属性名,可手动搭配FilterExpression使用:

import boto3
import pprint

dbresource = boto3.resource('dynamodb')

def lambda_handler(event, context):
    tableobject = dbresource.Table('basicSongsTable')
    response = tableobject.scan(
        FilterExpression='#art = :artist_val',
        ExpressionAttributeNames={'#art': 'artist'},
        ExpressionAttributeValues={':artist_val': 'Matt'}
    )
    pprint.pprint(response)

额外提示

  • 无需重复导入pprint,可移除代码中重复的from pprint import pprint。
  • 手动指定ExpressionAttributeValues时,不需要像原代码那样用{'S': 'Matt'}强制定义类型,Boto3会根据Python类型自动转换为DynamoDB对应类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:45:45