使用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
相关产品推荐
相关产品推荐

