簡體   English   中英

DynamoDB 在使用 update_item 時添加項目而不是更新項目

[英]DynamoDB adds item instead of updates item when using update_item

我有一個從 DynamoDB 表填充的 html 表。 單擊一行會在模態中彈出一個編輯表單。 輸入的數據被發送到燒瓶服務器以更新項目 - 使用 AWS DynamoDB - 在模式表單中編輯。 閱讀 AWS 文檔后,正確的方法是使用update_item 但是,這樣做時會再次添加該項目,而不是更新該項目。 我在這里使用 AWS 編寫了以下腳本。 在我的 DynamoDB 表中, primary partition keyKEY1primary sort key是以下參考中的KEY2

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 文檔

編輯現有項目的屬性,或將新項目添加到表中(如果尚不存在)。

確保主鍵(分區鍵排序鍵)在您的表中是唯一的。 如果不是, updateitem將在數據庫中創建一個新項目。

您絕對確定該項目的主鍵已存在於數據庫中嗎?

你不能,我會向你解釋什么是不可能的。

當您使用鍵和順序鍵在 dynamo DB 上創建表時,您會自動在鍵和排序鍵之間創建索引。 我們知道索引是不可變的,這意味着您無法更新鍵。 正是因為這個原因,當您更新 dynamo 時會創建一個新元素。

這是表定義的問題,因為您永遠不需要更改鍵或排序鍵。 僅使用索引而不是排序索引重新創建表(因為如果您的應用程序可以更改沒有意義的排序索引)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM