首页 > 解决方案 > DynamoDB 在使用 update_item 时添加项目而不是更新项目

问题描述

我有一个从 DynamoDB 表填充的 html 表。单击一行会在模式中弹出一个编辑表单。输入的数据被发送到烧瓶服务器以更新以模态形式编辑的项目 - 使用 AWS DynamoDB。阅读 AWS 文档后,正确的方法是使用update_item. 但是,这样做时会再次添加该项目,而不是更新该项目。我在这里使用 AWS编写以下脚本。在我的 DynamoDB 表中,primary partition keyisKEY1primary sort keyisKEY2在下面的参考中。

table = dynamodb.Table('table_name') #define DynamoDB table
key1 = account_id #string value of account id
key2 = request.form["KEY2"] #this is a read only field in the form, so the key does not get updated here
form_val1 = request.form["input1"]
form_val2 = request.form["input2"]
form_val3 = request.form["input3"]
form_val4 = request.form["input4"]
form_val5 = request.form["input5"]
form_val6 = request.form["input6"]
form_val7 = request.form["input7"]
form_val8 = request.form["input8"]
form_val9 = request.form["input9"]
            
#update item in dynamo     
table.update_item(
             Key={
             'KEY1': key1, #partition key
             'KEY2': key2 #sort key
             },
             UpdateExpression='SET dbField1 = :val1, dbField2 = :val2, dbField3 = :val3, dbField4 = :val4, dbField5 = :val5, dbField6 = :val6, dbField7 = :val7, dbField8 = :val8, dbField9 = :val9',
             ExpressionAttributeValues={
             ':val1': form_val1, 
             ':val2': form_val2, 
             ':val3': form_val3, 
             ':val4': form_val4,
             ':val5': form_val5, 
             ':val6': form_val6, 
             ':val7': form_val7, 
             ':val8': form_val8, 
             ':val9': form_val9
             }
             )

标签: python-3.xamazon-web-servicesamazon-dynamodb

解决方案


这是完整的查询吗?update_item文档说这是必需的TableName,我在您的代码段中没有看到。

更新项文档

编辑现有项目的属性,如果新项目不存在,则将其添加到表中。

确保主键(分区键排序键)在您的表中是唯一的。如果不是,updateitem将在数据库中创建一个新项目。

您绝对确定该项目的主键已经存在于数据库中吗?


推荐阅读