boto3を使いdynamoDBに上書きさせずにデータを保存

boto3を用いてDynamoDBにデータを保存させる時、put_item()関数を使用すると既存のデータが存在した場合上書きを行ってしまう。

# {key: "hoge", value: "hoge"}がすでにDynamoDB上に存在
table.put_item(
    Item={
        'key': "hoge",
        'value': "piyo"
    }
)
# 上を実行すると既存のデータが{key: "hoge", value: "piyo"}として上書きされてしまう

上書きを防止するにはattribute_not_existsオプションを追加します。 boto3では以下のように記述します。

# {key: "hoge", value: "hoge"}がすでにDynamoDB上に存在
table.put_item(
    Item={
        'key': "hoge",
        'value': "piyo"
    },
    ConditionExpression='attribute_not_exists(key)'
)
# すでにkey="hoge"のデータが保存されているので上書きせずエラーを返す