ちばのてっく

積極的にアウトプット

Boto3でDynamoDBにデータを追加してみた

Boto3でDynamoDBをScanしてみたの続き。
DyanmoDBにデータを追加してみる。

やってみた

put_itemでデータを追加してみる。
put_itemは、プライマリキーで追加するレコードを指定し、存在しないプライマリキーであれば新規追加、存在するプライマリキーであれば更新が行える。

新規追加

存在しないプライマリキーでput_itemしてみる。

from flask import Flask
import boto3 

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello world!</p>"

@app.route("/dynamodb_scan/")
def dynamodb_scan():
    client = boto3.client("dynamodb")
    response = client.scan(
        TableName="temp"
    )
    return response

# ↓今回追加した箇所
@app.route("/dynamodb_put/")
def dynamodb_put():
    client = boto3.client("dynamodb")
    response  = client.put_item(
        TableName="temp",
        Item = {
            "target": { # pk
                "S": "pineapple",
            },
            "color": {
                "S": "yellow",
            }
        }
    )
    return response
# ↑今回追加した箇所

if __name__ == "__main__":
    app.run(debug=True)

無事、HTTPStatusCode200が返却された。

{
  "ResponseMetadata": {
    "HTTPHeaders": {
      "connection": "keep-alive",
      "content-length": "2",
      "content-type": "application/x-amz-json-1.0",
      "date": "Fri, 15 Mar 2024 01:38:06 GMT",
      "server": "Server",
      "x-amz-crc32": "2745614147",
      "x-amzn-requestid": "KKT5O9UGS4H6RQUVH82H7PMSCFVV4KQNSO5AEMVJF66Q9ASUAAJG"
    },
    "HTTPStatusCode": 200,
    "RequestId": "KKT5O9UGS4H6RQUVH82H7PMSCFVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "RetryAttempts": 0
  }
}

追加されたItemをscanで確認してみる。putしたItemが追加されている。

{
  "Count": 3,
  "Items": [
    {
      "color": {
        "S": "yellow"
      },
      "target": {
        "S": "banana"
      }
    },
    {
      "color": {
        "S": "red"
      },
      "target": {
        "S": "apple"
      }
    },
    {
      "color": {
        "S": "yellow"
      },
      "target": {
        "S": "pineapple"
      }
    }
  ],
  "ResponseMetadata": {
    "HTTPHeaders": {
      "connection": "keep-alive",
      "content-length": "184",
      "content-type": "application/x-amz-json-1.0",
      "date": "Fri, 15 Mar 2024 01:40:35 GMT",
      "server": "Server",
      "x-amz-crc32": "2896593655",
      "x-amzn-requestid": "IMTUU8I25U2R8UDOF2NP7MO93BVV4KQNSO5AEMVJF66Q9ASUAAJG"
    },
    "HTTPStatusCode": 200,
    "RequestId": "IMTUU8I25U2R8UDOF2NP7MO93BVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "RetryAttempts": 0
  },
  "ScannedCount": 3
}

更新

存在するプライマリキーでput_itemしてみる。

from flask import Flask
import boto3 

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello world!</p>"

@app.route("/dynamodb_scan/")
def dynamodb_scan():
    client = boto3.client("dynamodb")
    response = client.scan(
        TableName="temp"
    )
    return response

@app.route("/dynamodb_put/")
def dynamodb_put():
    client = boto3.client("dynamodb")
    response  = client.put_item(
        TableName="temp",
        Item = {
            "target": { # pk
                "S": "pineapple",
            },
            "color": {
                "S": "yellow",
            }
        }
    )
    return response

# ↓今回追加した箇所
@app.route("/dynamodb_put2/")
def dynamodb_put2():
    client = boto3.client("dynamodb")
    response  = client.put_item(
        TableName="temp",
        Item = {
            "target": { # pk
                "S": "pineapple",
            },
            "color": {
                "S": "green",
            }
        }
    )
    return response
# ↑今回追加した箇所

if __name__ == "__main__":
    app.run(debug=True)

無事、HTTPStatusCode200が返却された。

{
  "ResponseMetadata": {
    "HTTPHeaders": {
      "connection": "keep-alive",
      "content-length": "2",
      "content-type": "application/x-amz-json-1.0",
      "date": "Fri, 15 Mar 2024 01:48:45 GMT",
      "server": "Server",
      "x-amz-crc32": "2745614147",
      "x-amzn-requestid": "MNNPDNMIGF1OGVDH3MMMOKUHHVVV4KQNSO5AEMVJF66Q9ASUAAJG"
    },
    "HTTPStatusCode": 200,
    "RequestId": "MNNPDNMIGF1OGVDH3MMMOKUHHVVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "RetryAttempts": 0
  }
}

追加されたItemをscanで確認してみる。pineappleのcolorがgreenに更新されている。

{
  "Count": 3,
  "Items": [
    {
      "color": {
        "S": "yellow"
      },
      "target": {
        "S": "banana"
      }
    },
    {
      "color": {
        "S": "red"
      },
      "target": {
        "S": "apple"
      }
    },
    {
      "color": {
        "S": "green"
      },
      "target": {
        "S": "pineapple"
      }
    }
  ],
  "ResponseMetadata": {
    "HTTPHeaders": {
      "connection": "keep-alive",
      "content-length": "183",
      "content-type": "application/x-amz-json-1.0",
      "date": "Fri, 15 Mar 2024 01:49:44 GMT",
      "server": "Server",
      "x-amz-crc32": "3681714569",
      "x-amzn-requestid": "L3ECDIJLLETKV6R6JNNRRT8OERVV4KQNSO5AEMVJF66Q9ASUAAJG"
    },
    "HTTPStatusCode": 200,
    "RequestId": "L3ECDIJLLETKV6R6JNNRRT8OERVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "RetryAttempts": 0
  },
  "ScannedCount": 3
}

参考

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/put_item.html