如何更新DynamoDB中列表内字典的表项值?
解决DynamoDB嵌套数组元素更新问题
问题原因
你的代码尝试直接更新顶层的InstanceType字段,但目标值实际嵌套在instanceParameters数组的键值对对象中,UpdateExpression的路径错误,导致无法匹配到要修改的字段,因此数据无变化。
解决方案
使用DynamoDB的数组元素匹配语法,定位到instanceParameters数组中key为InstanceType的对象,更新其value属性:
修改后的代码
import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('Instances') def update_database(pk, sk): try: res = table.update_item( Key={ 'PK': pk, 'SK': sk }, ConditionExpression='attribute_exists(instanceParameters)', UpdateExpression='SET instanceParameters[?(@.key = :target_key)].value = :new_val', ExpressionAttributeValues={ ':target_key': 'InstanceType', ':new_val': 't2.4xlarge' }, ReturnValues='UPDATED_NEW' ) print("更新成功:", res) except Exception as e: print("更新失败:", e)
代码说明
instanceParameters[?(@.key = :target_key)]:通过谓词匹配数组中所有key等于InstanceType的对象- 匹配到目标对象后,直接更新其
value字段为指定的新值 - 保留
ConditionExpression确保instanceParameters属性存在,避免误操作不存在的项
如果数组中存在多个key为InstanceType的对象,该操作会更新所有匹配项;若需限定只更新单个,可在ConditionExpression中添加额外校验条件(比如验证数组中仅存在一个目标key)。
内容的提问来源于stack exchange,提问作者MB41
相关产品推荐
相关产品推荐

