0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DynamoDBテーブルに同じプライマリーキーでputした時の挙動

Last updated at Posted at 2022-12-09

やったこと

DynamoDBテーブルで、同じプライマリーキーでputした場合どうなるのでしょうか

結果

同じプライマリーキーでput操作をすると、既存itemが上書きされた。
同じキーを持つ項目がテーブルにすでに存在する場合は、新しい項目に置き換えられる。
参考: 項目の読み込み

例) id = プライマリキー
{id: 0, name: "apple", price: 150, register: makimatsu}

{id: 0, name: "banana", price: 200}

対策

  • 条件付きの書き込みを使用する

    • 同じプライマリキーを持つ既存の項目がない場合にのみ、PutItem オペレーションが成功するようにする
    • 属性の 1 つに特定の値がある場合に UpdateItem オペレーションが項目を変更することを防ぐようにする
    • 条件付き書き込みは、複数のユーザーが同じ項目を変更しようとする場合に役立つ
  • 使用例

.py
putItem = {
    id: 1, ## プライマリキー
    name: 'orange',
    price: 100
}
try:
    ## id=1のitemが存在しない場合のみputする
    ## id=1のitemが存在する場合は、ConditionalCheckFailedExceptionエラーが発生する
    ret = table.put_item(
        Item=putItem,
        ConditionExpression=Attr('id').not_exists()
    )
except botocore.exceptions.ClientError as e:
    if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
        logger.error("一意制約違反のため、DynamoDbへの挿入失敗。すでに同様のキーのレコードが存在します。Item=%s", putItem)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?