Querier

Pythonとboto3を使用したDynamoDBのデータ操作 | 取得、追加、更新、削除、トランザクション処理まで

2023.07.12に公開 | 2023.07.12に更新

Querier運営

@querier_io@querierinc

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る

Pythonとboto3を用いてDynamoDBのデータ操作を学びましょう。

今回はより実践的な例を挙げ、詳しく解説していきます。操作内容としては、「データの取得」「データの追加」「データの更新」「データの削除」「トランザクション処理」について扱います。

セットアップ

まず、PythonでDynamoDBを操作するためには、AWSのSDKであるboto3をインストールする必要があります。

pip install boto3

次に、DynamoDBのクライアントを生成します。

import boto3

dynamodb = boto3.resource('dynamodb')

こちらはboto3の公式ドキュメントへのリンクです。

データの取得

DynamoDBでデータを取得するには基本的に二つの方法があります。「GetItem」を用いた直接的な取得と、「Scan」、「Query」を用いた検索による取得です。

GetItemによる取得

例として、"year"が2013で"title"が"Rush"の映画データを取得します。

table = dynamodb.Table('Movies')

response = table.get_item(
   Key={
        'year': 2013,
        'title': 'Rush'
    }
)

item = response['Item']
print(item)

Scanによる取得

全てのデータをスキャンします。しかし、大量のデータが存在する場合は時間とコストがかかるため注意が必要です。

table = dynamodb.Table('Movies')

response = table.scan()

items = response['Items']
print(items)

Queryによる取得

特定の条件を満たすアイテムを検索します。ここでは、"year"が2013の映画データを検索します。

table = dynamodb.Table('Movies')

response = table.query(
    KeyConditionExpression=boto3.dynamodb.conditions.Key('year').eq(2013)
)

items = response['Items']
print(items)

詳細なドキュメントはこちらをご覧ください。

データの追加

新しい映画データを追加します。ここでは、"year"が2023で"title"が"New Movie"の映画データを追加します。

table = dynamodb.Table('Movies')

table.put_item(
   Item={
        'year': 2023,
        'title': 'New Movie',
        'info': {
            'plot': 'Nothing happens at all.',
            'rating': 0
        }
    }
)

詳細なドキュメントはこちらをご覧ください。

データの更新

映画の情報を更新します。ここでは、"year"が2023で"title"が"New Movie"の映画のプロットと評価を更新します。

table = dynamodb.Table('Movies')

table.update_item(
    Key={
        'year': 2023,
        'title': 'New Movie'
    },
    UpdateExpression='SET info.plot = :plot, info.rating = :rating',
    ExpressionAttributeValues={
        ':plot': 'Everything happens at once.',
        ':rating': 5.5
    }
)

詳細なドキュメントはこちらをご覧ください。

データの削除

映画データを削除します。ここでは、"year"が2023で"title"が"New Movie"の映画データを削除します。

table = dynamodb.Table('Movies')

table.delete_item(
    Key={
        'year': 2023,
        'title': 'New Movie'
    }
)

詳細なドキュメントはこちらをご覧ください。

トランザクション処理

複数の映画データの追加と更新を一つのトランザクションとして行います。

client = boto3.client('dynamodb')

response = client.transact_write_items(
    TransactItems=[
        {
            'Put': {
                'TableName': 'Movies',
                'Item': {
                    'year': {'N': '2024'},
                    'title': {'S': 'Another Movie'},
                    'info': {
                        'M': {
                            'plot': {'S': 'Nothing happens again.'},
                            'rating': {'N': '0'}
                        }
                    }
                }
            }
        },
        {
            'Update': {
                'TableName': 'Movies',
                'Key': {
                    'year': {'N': '2023'},
                    'title': {'S': 'New Movie'}
                },
                'UpdateExpression': 'SET info.plot = :plot, info.rating = :rating',
                'ExpressionAttributeValues': {
                    ':plot': {'S': 'Actually, a lot happens.'},
                    ':rating': {'N': '4.5'}
                }
            }
        }
    ]
)

詳細なドキュメントはこちらをご覧ください。

さいごに

この記事を通じて、Pythonとboto3を用いてDynamoDBのデータ操作を行う方法について理解を深めていただけたことと思います。

初めてDynamoDBを使用する方や、Pythonでデータ操作を行いたい方々が、この記事を参考にスムーズに取り組みが進むことを願っています。

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

最新の記事

【告知】値の参照時の仕様変更のお知らせ

このたび2024年11月11日に値の参照に関する仕様変更を予定しておりますので詳細について報告いたします。

more

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る