AWS DynamoDB 対象のアイテムが更新できたかを確認する

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

RDBのupdateやdeleteは影響を受けた行数をAffectedRowsで確認できるが、DynamoDBの場合、ReturnValueでそれに該当するattributes指定はないようです。

update tablename set field1 = 1 where pkey = :val and field1 = 0

RDBのこのようなケースの場合、pkeyがuniqの時、field1 = 0の時はAffectedRows = 1field1 <> 0の時はAffectedRows = 0を返す。


DynamoDBの場合、更新できたか?というより、変更があったか?というアプローチを用いて、更新前の値ReturnValues = 'UPDATED_OLD'の値を取得して判断する方法があります。

response = table.update_item(
  Key = {
    'pkey': value
  },
  UpdateExpression = 'set field1=:val',
  ExpressionAttributeValues = {
    ':val': 1
  },
  ReturnValues = 'UPDATED_OLD'
)

# 更新の確認 2回目の更新以降はresponseは"1"を返すので条件と合致しない
if response['Attributes']['field1'] == 0:
  # 更新できた場合の処理
  ...

項目と属性を操作する - Amazon DynamoDB