大瀧
2024.01.04
620
この記事では、boto3でDynamoDBを操作するときによく使用するが忘れやすいものをピックアップして記載します。
※随時追記予定です。
公式のドキュメントはこちら
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
アイテムをテーブルに1件追加したい場合にはput_item()を使用します。
table.put_item(
Item={
'username': 'janedoe',
'first_name': 'Jane',
'last_name': 'Doe',
'age': 25,
'account_type': 'standard_user',
}
)
一度に大量のデータをロードする場合は、batch_writer()を利用すると、プロセスを高速化し、サービスに対する書き込みリクエストの数を減らすことができます。
DynamoDBは一度にputできる数が最大25という制限がありますが、boto3のbatch_writer()を使えば、特に気にすることなくよしなにやってくれます。
with table.batch_writer() as batch:
batch.put_item(
Item={
'account_type': 'standard_user',
'username': 'johndoe',
'first_name': 'John',
'last_name': 'Doe',
'age': 25,
'address': {
'road': '1 Jefferson Street',
'city': 'Los Angeles',
'state': 'CA',
'zipcode': 90001
}
}
)
batch.put_item(
Item={
'account_type': 'super_user',
'username': 'janedoering',
'first_name': 'Jane',
'last_name': 'Doering',
'age': 40,
'address': {
'road': '2 Washington Avenue',
'city': 'Seattle',
'state': 'WA',
'zipcode': 98109
}
}
)
batch.put_item(
Item={
'account_type': 'standard_user',
'username': 'bobsmith',
'first_name': 'Bob',
'last_name': 'Smith',
'age': 18,
'address': {
'road': '3 Madison Lane',
'city': 'Louisville',
'state': 'KY',
'zipcode': 40213
}
}
)
batch.put_item(
Item={
'account_type': 'super_user',
'username': 'alicedoe',
'first_name': 'Alice',
'last_name': 'Doe',
'age': 27,
'address': {
'road': '1 Jefferson Street',
'city': 'Los Angeles',
'state': 'CA',
'zipcode': 90001
}
}
)
アイテムを1件取得するにはget_item()を使用します。
response = table.get_item(
Key={
'username': 'janedoe',
'last_name': 'Doe'
}
)
item = response['Item']
print(item)
ハッシュキー、ソートキー、GSIで検索する場合にはKeyを使用します。
response = table.query(
KeyConditionExpression=Key('username').eq('johndoe')
)
items = response['Items']
print(items)
ハッシュキー、ソートキー、GSI以外で検索する場合にはAttrを使用します。
MySQLなどのIN句に相当する is_in はscan()でのみ使用可能です。
response = table.scan(
FilterExpression=Attr('age').lt(27)
)
items = response['Items']
print(items)