2017-08-25 40 views
0

如果某些屬性(其中某些屬性是DynamoDB表的主鍵,其中某些屬性不匹配)與我插入的新對象相匹配,我在使用Boto3的put_item替換DynamoDB中的對象時出現問題進入桌子。如果對象上存在某些屬性,那麼使用Boto3,可以讓put_item替換DynamoDB中的對象?

舉例來說,如果一個DynamoDB表裏面出現:

user (Partition Key) | ts (Sort Key) | height | weight 
__________________________________________________________________________________ 

'fred'     01-01-2017  5'10'' 190 
'george'    01-02-2017  5'08'' 200 

,我想一個新行添加到該表:

'fred'     01-01-2018  5'10'' 200 

基於用戶fred和高度5'10''與已經在表格中的其他用戶匹配,我想用新條目替換舊條目。文檔對boto3和AWS put_item有點不清楚 - 我該怎麼做?

以供參考,這是我目前:

tracking_result = tracking_dbs[drivetype].put_item(
     Item=track, 
     # insert fields to remove old entry that matches 
     # up with certain attributes from new entry here 
) 

回答

1

中DynamoDB已經存在的項目將僅當分區鍵和新項目的排序關鍵字匹配的新條目被替換的現有條目。否則會創建一個新條目。

對於您的情況,您必須刪除現有條目(通過掃描獲取現有條目,而不是查詢,因爲查詢需要分區和排序鍵作爲輸入參數,然後執行刪除操作),然後創建新條目。

+0

謝謝!有沒有辦法讓我在沒有掃描的情況下做到這一點?如果可能,我想避免在數據庫上執行O(n)操作。 –

+0

你需要排序鍵嗎?如果不是,並且表中沒有太多數據,請刪除該表並僅使用分區鍵(用戶)創建一個新表,並且不要使用排序鍵。然後,put_item將按您的要求工作。 –

相關問題