慕田峪4524236
2023-07-18 10:27:48
我正在嘗試對 DynamoDB 表進行簡單的操作。架構(gòu)非常簡單(哈希鍵)SummaryId:字符串(排序鍵)狀態(tài):字符串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() 預(yù)計會添加此項目。我使用 update_item() api 的目的是它將項目狀態(tài)從“IN_PROGRESS”更改為“COMPLETE”。相反,update_item() API 在表中創(chuàng)建一個新項目,其中包含 PK“Id1::Id2::Id4”和 RK“COMPLETE”我如何實現(xiàn)預(yù)期的行為?提前致謝!
1 回答

胡子哥哥
TA貢獻1825條經(jīng)驗 獲得超6個贊
根據(jù)您描述的架構(gòu),兩個操作(放置和更新)會產(chǎn)生兩個不同的項目,這是預(yù)期的行為。
DynamoDB 的核心概念頁面描述了分區(qū)鍵(哈希)和排序鍵(范圍),如下所示:
分區(qū)鍵 – 一種簡單的主鍵,由一個稱為分區(qū)鍵的屬性組成。
和
分區(qū)鍵和排序鍵 - 稱為復(fù)合主鍵,這種類型的鍵由兩個屬性組成。第一個屬性是分區(qū)鍵,第二個屬性是排序鍵。
對你來說重要的是:
在具有分區(qū)鍵和排序鍵的表中,兩個項目可能具有相同的分區(qū)鍵值。但是,這兩個項目必須具有不同的排序鍵值。
PK Id1::Id2::Id4
將上述內(nèi)容應(yīng)用于您的情況,這意味著您正在使用-SK IN_PROGRESS
和另一個對象Id1::Id2::Id4
-創(chuàng)建一個對象SK COMPLETE
。
如果您的唯一標識符只是Id1::Id2::Id4
,則更改表的架構(gòu)并僅保留分區(qū)鍵,如果您這樣做,上面的代碼將首先插入具有該 ID 和狀態(tài)的項目,然后將IN_PROGRESS
同一項目更新為COMPLETE
。
添加回答
舉報
0/150
提交
取消