RDBのupdateやdeleteは影響を受けた行数をAffectedRowsで確認できるが、DynamoDBの場合、ReturnValueでそれに該当するattributes指定はないようです。
update tablename set field1 = 1 where pkey = :val and field1 = 0
RDBのこのようなケースの場合、pkeyがuniqの時、field1 = 0
の時はAffectedRows = 1
をfield1 <> 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: # 更新できた場合の処理 ...
リンク