0
0

More than 1 year has passed since last update.

LambdaでDynamoDBのトランザクション処理をおこなう(Python)

Last updated at Posted at 2022-12-13

概要

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"

おわりに

今回は、同一テーブルの別レコードを同時に更新する処理を紹介しました。
値を変えれば、同じレコード内や同一カラムの更新等も可能です。
ぜひ参考にしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0