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"のデータが保存されているので上書きせずエラーを返す