python-3.x - DynamoDB 在使用 update_item 时添加项目而不是更新项目
问题描述
我有一个从 DynamoDB 表填充的 html 表。单击一行会在模式中弹出一个编辑表单。输入的数据被发送到烧瓶服务器以更新以模态形式编辑的项目 - 使用 AWS DynamoDB。阅读 AWS 文档后,正确的方法是使用update_item
. 但是,这样做时会再次添加该项目,而不是更新该项目。我在这里使用 AWS编写以下脚本。在我的 DynamoDB 表中,primary partition key
isKEY1
和primary sort key
isKEY2
在下面的参考中。
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
}
)
解决方案
这是完整的查询吗?update_item
文档说这是必需的TableName
,我在您的代码段中没有看到。
从更新项文档:
编辑现有项目的属性,如果新项目不存在,则将其添加到表中。
确保主键(分区键和排序键)在您的表中是唯一的。如果不是,updateitem
将在数据库中创建一个新项目。
您绝对确定该项目的主键已经存在于数据库中吗?
推荐阅读
- javascript - 制表符:如果值是常量但格式化的值不是(datetimediff),则强制更新单元格
- javascript - 无法读取 HTMLTableElement 处未定义的属性“值”。<'anonymous'> 更新
- android - 在 Xamarin Forms (Android) 中,MainActivity.cs 中“Activity(Label =”的目的是什么?
- gcc - 将默认 ARM gcc 选项更改为 thumb
- python - Python 标准库的入口点是如何注册的?
- algorithm - 如何从许多点找到最远的x,y坐标?
- javascript - 检查 Jest 中功能组件的状态值
- wordpress - 如何跳过结帐页面 Woocommerce?
- python - 使用 Python 将单个列表分成 2 个列表
- typescript - 如何正确地将接口分配给以下对象的属性?