【AWS】【DynamoDB】【Python】値を取得して更新する

IT

コードmemo

  • 入っているカラムは以下3つ
    • testid → パーティションキー
    • testvalue → 更新したい値
    • testflag → インデックスのパーティションキー
  • testflag = 1の場合のtestvalueを値を+1して更新したい
import boto3

# DynamoDBクライアントを作成
dynamodb = boto3.client('dynamodb')

# テーブル名
table_name = '【テーブル名】'
# インデックス名
index_name = 'testflag-index'

def get_value_fromdynamodb():
    # 条件式
    condition_expression = 'testflag = :val'
    expression_attribute_values = {':val': {'N': '1'}}  # test_flagが1の場合

    # クエリの実行
    response = dynamodb.query(
        TableName=table_name,
        IndexName=index_name,
        KeyConditionExpression=condition_expression,
        ExpressionAttributeValues=expression_attribute_values
    )

    # クエリ結果からアイテムを取り出してリストに格納
    items = response['Items']

    return items

def update_dynamodb(items):
    # リストからtestvalueに+1した値でDynamoDBのテーブルを更新
    for item in items:
        # testvalue属性の値を取得し、1を加える
        incremented_value = int(item['testvalue']['N']) + 1

        # 更新式を定義
        update_expression = 'SET testvalue = :val'
        expression_attribute_values = {':val': {'N': str(incremented_value)}}

        # アップデートの実行        
        dynamodb.update_item(
            TableName=table_name,
            Key={'testid': item['testid']}, #パーティションキーを指定
            UpdateExpression=update_expression,
            ExpressionAttributeValues=expression_attribute_values
        )

if __name__ == "__main__":

    #DynamoDBから値を取得
    items = get_value_fromdynamodb()

    #取得できたリストを確認
    for item in items:
        print(item['testvalue'])

    #取得したリストに基づき値を更新
    update_dynamodb(items)

コメント

タイトルとURLをコピーしました