亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

boto3 DynamoDB update_item() API 創建一個新項目而不是更新它

boto3 DynamoDB update_item() API 創建一個新項目而不是更新它

慕田峪4524236 2023-07-18 10:27:48
我正在嘗試對 DynamoDB 表進行簡單的操作。架構非常簡單(哈希鍵)SummaryId:字符串(排序鍵)狀態:字符串def put_item(dynamo_table, summary_id, status):    return dynamo_table.put_item(        Item={            'SummaryId': summary_id,            'Status': status        },        ReturnValues="ALL_OLD"    )def update_item(dynamo_table, summary_id, status):    response = dynamo_table.update_item(        Key={'SummaryId': summary_id},        AttributeUpdates={            'Status': status,        },        ReturnValues="UPDATED_OLD"    )    return responsedef initialize_dynamodb_table():    dynamodb = boto3.Session(profile_name=PROFILE_NAME,                             region_name=REGION_NAME) \        .resource('dynamodb')    return dynamodb.Table(TABLE_NAME)def main():    dynamodb_table = initialize_dynamodb_table()    # Update the above item    response = put_item(dynamodb_table, "Id1::Id2::Id4", "IN_PROGRESS")    pprint(response)    response = update_item(dynamodb_table, "Id1::Id2::Id4", "COMPLETE")    pprint(response)if __name__ == '__main__':    main()PK“Id1::Id2::Id4”的項目不存在。因此 put_item() 預計會添加此項目。我使用 update_item() api 的目的是它將項目狀態從“IN_PROGRESS”更改為“COMPLETE”。相反,update_item() API 在表中創建一個新項目,其中包含 PK“Id1::Id2::Id4”和 RK“COMPLETE”我如何實現預期的行為?提前致謝!
查看完整描述

1 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

根據您描述的架構,兩個操作(放置和更新)會產生兩個不同的項目,這是預期的行為。

DynamoDB 的核心概念頁面描述了分區鍵(哈希)和排序鍵(范圍),如下所示:

分區鍵 – 一種簡單的主鍵,由一個稱為分區鍵的屬性組成。

分區鍵和排序鍵 - 稱為復合主鍵,這種類型的鍵由兩個屬性組成。第一個屬性是分區鍵,第二個屬性是排序鍵。

對你來說重要的是:

在具有分區鍵和排序鍵的表中,兩個項目可能具有相同的分區鍵值。但是,這兩個項目必須具有不同的排序鍵值。

PK Id1::Id2::Id4將上述內容應用于您的情況,這意味著您正在使用-SK IN_PROGRESS 和另一個對象Id1::Id2::Id4-創建一個對象SK COMPLETE

如果您的唯一標識符只是Id1::Id2::Id4,則更改表的架構并僅保留分區鍵,如果您這樣做,上面的代碼將首先插入具有該 ID 和狀態的項目,然后將IN_PROGRESS同一項目更新為COMPLETE。


查看完整回答
反對 回復 2023-07-18
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號