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

使用boto3扫描DynamoDB的data列报错:保留关键字问题求助

解决DynamoDB中ProjectionExpression使用保留关键字data的问题

你遇到的错误核心原因是:data是DynamoDB的保留关键字,直接在ProjectionExpression中引用会触发ValidationException,而seqno不属于保留关键字,所以能正常返回结果。

解决方案:使用表达式属性名映射

通过ExpressionAttributeNames参数给保留关键字的属性设置别名,绕过语法限制,具体实现如下:

修改后的基础代码

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TablaLoraPF')
# 用别名#d映射真实属性名data
response = table.scan(
    ProjectionExpression='#d',
    ExpressionAttributeNames={'#d': 'data'}
)
data_items = response['Items']

# 打印获取到的data列数据
for item in data_items:
    print(item)

处理分页的完整代码(可选)

DynamoDB单次扫描最多返回1MB数据,如果你的表中数据量较大,需要循环处理分页才能获取全部数据:

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TablaLoraPF')
all_data = []

# 首次扫描
response = table.scan(
    ProjectionExpression='#d',
    ExpressionAttributeNames={'#d': 'data'}
)
all_data.extend(response['Items'])

# 循环处理剩余分页数据
while 'LastEvaluatedKey' in response:
    response = table.scan(
        ProjectionExpression='#d',
        ExpressionAttributeNames={'#d': 'data'},
        ExclusiveStartKey=response['LastEvaluatedKey']
    )
    all_data.extend(response['Items'])

# 打印前80条数据
for item in all_data[:80]:
    print(item)

关键说明

  • 别名必须以#开头,可自定义命名(比如#data_col也可以)
  • ExpressionAttributeNames的作用是将别名与真实属性名做映射,避免直接使用保留关键字触发语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:25:40