概要
DynamoDBへのトランザクション処理をPythonで書く方法を紹介します。
前提条件
- DynamoDBのテーブルが用意されていること
環境
- Lambda
- ランタイム:Python3.9
- リージョン:ap-northeast-1
コード
import boto3
dynamoDB = boto3.resource("dynamodb")
table_name = <DynamoDBのテーブル名>
table = dynamoDB.Table(table_name)
client = boto3.client('dynamodb', region_name='ap-northeast-1')
def lambda_handler(event, context):
id1 = <更新するデータの主キー>
id2 = <更新するデータの主キー>
column1 = <更新する値のカラム名>
column2 = <更新する値のカラム名>
data1 = <更新する値>
data2 = <更新する値>
# トランザクション処理
client.transact_write_items(
TransactItems=[
{
'Update': {
'TableName': table_name,
'Key': {
'id': {'S': id1}
},
'UpdateExpression': 'SET #s=:s',
'ExpressionAttributeNames': {
'#s' : column1
},
'ExpressionAttributeValues': {
':s' : {'S': data1}
}
}
},
{
'Update': {
'TableName': table_name,
'Key': {
'id': {'S': id2}
},
'UpdateExpression': 'SET #s=:s',
'ExpressionAttributeNames': {
'#s' : column2
},
'ExpressionAttributeValues': {
':s' : {'S': data2}
}
}
}
]
)
return "Success"
おわりに
今回は、同一テーブルの別レコードを同時に更新する処理を紹介しました。
値を変えれば、同じレコード内や同一カラムの更新等も可能です。
ぜひ参考にしてください。