在使用KeyConditionExpression时,如果使用了DynamoDB保留的关键字作为属性名,则会出现该错误。解决方法是使用表达式属性名称来避免属性名与关键字冲突。例如,如果您的表中有名为"name"的属性,则可以像下面的代码示例一样使用表达式属性名称 "#n" 来替代它:
import boto3
client = boto3.client('dynamodb')
response = client.query(
TableName='my-table',
KeyConditionExpression='#n = :val',
ExpressionAttributeNames={
"#n": "name",
},
ExpressionAttributeValues={
":val": {
"S": "John",
}
}
)
print(response)
在上述代码示例中,我们使用了表达式属性名称 "#n" 来代替 "name" 属性名,以避免与DynamoDB保留关键字发生冲突。