如何使用boto3更新DynamoDB中包含字典列表的条目
解决方案
你可以根据实际需求选择以下两种更新方式:
场景1:直接覆盖整个Keys字段(全量替换)
如果不需要保留原有Keys字段的内容,直接用新的字典列表整体替换即可,逻辑和更新普通字段一致:
table = dynamodb_resource.Table("name") table.update_item( TableName=table_name, Key={"Id": user["Id"]}, UpdateExpression="set Name=:n, Keys=:k", ExpressionAttributeValues={ ":n": user["Name"], ":k": user["Keys"] }, ReturnValues="UPDATED_NEW" )
你要写入Item1就传长度为1的Keys列表,要写入Item2就传长度为2的Keys列表,DynamoDB会自动识别嵌套字典的列表结构完成存储。
场景2:向现有Keys列表追加字典元素(增量更新)
如果不想覆盖原有列表,只是新增字典元素,可以用DynamoDB内置的list_append函数实现:
# 要追加的新Key字典 new_key = {'KeyId': '6382920434', 'keyStatus': 'Active'} table = dynamodb_resource.Table("name") table.update_item( TableName=table_name, Key={"Id": user["Id"]}, UpdateExpression="set Keys = list_append(Keys, :new_key)", ExpressionAttributeValues={ # list_append要求两个入参都是列表类型,所以要把单个字典包成列表传入 ":new_key": [new_key] }, ReturnValues="UPDATED_NEW" )
- 如果需要把新元素插到列表开头,调换
list_append的参数顺序即可:list_append(:new_key, Keys) - 如果条目初始可能不存在Keys字段,可以提前加初始化逻辑,避免调用
list_append时报字段不存在的错误。
内容的提问来源于stack exchange,提问作者DenCowboy
相关产品推荐
相关产品推荐

