使用boto3 resource查询含保留字的DynamoDB时遇ValidationException错误
问题解决建议
你的错误源于KeyConditionExpression的写法问题:当使用Key("#pk").eq(":pk")时,:pk被DynamoDB当成了字面量字符串,而非ExpressionAttributeValues中定义的占位符;同时#pk也没有被识别为ExpressionAttributeNames的占位符,导致系统判定你提供的#pk未被使用。
以下两种修复方案任选其一:
方案一:使用字符串形式的条件表达式
直接通过字符串定义KeyConditionExpression,明确关联占位符与映射关系:
get_item = table.query( KeyConditionExpression="#pk = :pk", ExpressionAttributeNames={"#pk": "PK"}, ExpressionAttributeValues={":pk": record}, )
方案二:用Key对象直接传值
保留Key对象的写法,但直接传入实际值,无需通过ExpressionAttributeValues映射:
get_item = table.query( KeyConditionExpression=Key("#pk").eq(record), ExpressionAttributeNames={"#pk": "PK"}, )
另外注意:你的代码中使用了json.dumps但未导入json模块,需要在开头添加import json,否则运行时会抛出NameError。
内容的提问来源于stack exchange,提问作者dmomcilo
相关产品推荐
相关产品推荐

