DynamoDB Python のクエリ
- DynamoDB の紹介
- Boto3の紹介
- Boto3 を使用して DynamoDB にテーブルを作成する
- Boto3 を介して DynamoDB のテーブルを削除する
- Boto3 を介して DynamoDB のテーブルを一覧表示する
- Boto3 を介した DynamoDB のページネーション
- Boto3 を介した DynamoDB での並べ替え
- Boto3 経由で DynamoDB のアイテムを取得する
- Boto3 経由で DynamoDB の項目をスキャン
- DynamoDB のグローバル セカンダリ インデックス
- Boto3 を使用して DynamoDB テーブルをバックアップする
- まとめ
この記事では、Python を使用して Amazon DynamoDB にクエリを実行する方法について説明します。 また、Boto3 とは何か、なぜ DynamoDB にクエリを実行する必要があるのかについても説明します。
DynamoDB の紹介
DynamoDB は、組み込みのセキュリティ メカニズム、継続的なバックアップ、メモリ キャッシング、および便利なデータのインポート/エクスポート ツールを提供する NoSQL データベース サービスです。
DynamoDB は、AWS リージョン内の異なるアベイラビリティーゾーン (AZ) 間でデータを自動的にレプリケートし、停止やデータ損失に対するセキュリティを強化します。 DynamoDB では、きめ細かいアクセス制御、保存時の暗号化、ユーザー アクティビティの記録など、多数のセキュリティ機能を利用できます。
Boto3の紹介
Boto3 は、アマゾン ウェブ サービス (AWS) 用に開発された組み込みの Python ライブラリです。 このライブラリは、DynamoDB を含む Amazon のさまざまなサービスのやり取り、作成、構成、管理、および使用に役立ちます。
Boto3 のインストールとインポート
Boto3 ライブラリを Python ワークベンチにインストールするには、次のコマンドを使用します。
pip install boto3
出力:
コード:
import boto3
これにより、boto3 ライブラリがノートブックにインポートされます。
Boto3 を DynamoDB に接続する
次のコードを使用して、Boto3 を使用して DynamoDB に接続します。
コード:
import boto3
client = boto3.client(
"dynamodb",
aws_access_key_id="yyyy",
aws_secret_access_key="xxxx",
region_name="us-east-1",
)
Python Boto3 ライブラリ経由でデータベースに接続するには、AWS DynamoDB でデータベースを作成しておく必要があることに注意してください。
Boto3 を使用して DynamoDB にテーブルを作成する
DynamoDB のテーブルは、複数の方法で作成できます。 これには、Amazon CLI、AWS コンソールの使用、または Boto3 の使用が含まれます。
ここでは、前述の手順に従って、既に接続されているデータベースで Boto3 を使用します。 DynamoDB クライアントとテーブル リソースがどのように変化するかを理解することで、ニーズに応じていずれかを使用できます。このテーブル リソースは一部の操作を大幅に簡素化できるからです。
開発者は、boto3.resource('dynamodb')
リソースを使用して、DynamoDB テーブルとすべてのコンテンツを作成、更新、および削除できます。 このリソースは、条件式を使用した項目レベルのセキュリティとテーブル レベルのセキュリティをサポートしています。
DynamoDB データへのサーバーレス アクセスには、boto3.resource('dynamodb')
リソースを AWS Lambda 関数と組み合わせて使用します。
import boto3
dynamodb = boto3.resource("dynamodb", region_name="us-west-2")
table = dynamodb.create_table(
TableName="Movies",
KeySchema=[
{"AttributeName": "year", "KeyType": "HASH"}, # Partition key
{"AttributeName": "title", "KeyType": "RANGE"}, # Sort key
],
AttributeDefinitions=[
{"AttributeName": "id", "AttributeType": "N"},
{"AttributeName": "createdAt", "AttributeType": "S"},
],
ProvisionedThroughput={"ReadCapacityUnits": 10, "WriteCapacityUnits": 10},
)
print("Table status:", table.table_status)
Boto3 によるテーブルの作成は、アクティブになって表示されるまでに時間がかかります。 再試行する前に少し待つことをお勧めします。または、waiter
関数を使用して、テーブルがアクティブになったことを通知することもできます。
import botocore.session
session = botocore.session.get_session()
dynamodb = session.create_client(
"dynamodb", region_name="us-east-1"
) # low-level client
waiter = dynamodb.get_waiter("table_exists")
waiter.wait(TableName="my-table-name")
Boto3 を介して DynamoDB のテーブルを削除する
DynamoDB でテーブルを削除するのは非常に簡単です。 気が変わってデータベースからテーブルを削除したい場合は、次のコード スニペットを入力する必要があります。
import boto3
dynamodb = boto3.resource("dynamodb", region_name="us-east-1")
dynamodb.delete_table(TableName="Movies")
削除しようとしているテーブルは、データベースに同じ名前で既に存在しているか、エラー メッセージ (テーブルが見つかりません) が表示されることに注意してください。
Boto3 を介して DynamoDB のテーブルを一覧表示する
私たちの地域で利用可能なすべてのテーブルのリストを見つけることに関心がある場合は、list()
関数を使用して、地域で利用可能なすべてのテーブルを一覧表示する必要があります。
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
tables = list(dynamodb.tables.all())
print(tables)
テーブルの総数が 100 未満であることを確認する必要があります。そうしないと、リストをページ分割する必要があります。
Boto3 を介した DynamoDB のページネーション
1 回の list 呼び出しで、最大 1MB の項目の結果が返されます。 さらにリストを表示するには、2 回目の呼び出しを発行する必要があります。 LastEvaluatedKey
が応答オブジェクトに存在する場合、ExclusiveStartKey
を使用して別の呼び出しを行い、このテーブルからさらに項目を取得する必要があります。
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
response = table.query()
data = response["Items"]
# LastEvaluatedKey indicates that there are more results
while "LastEvaluatedKey" in response:
response = table.query(ExclusiveStartKey=response["LastEvaluatedKey"])
data.update(response["Items"])
Boto3 を介した DynamoDB での並べ替え
データベース側では、DynamoDB は結果を並べ替える方法を 1つだけ提供します。 テーブルにアイテムがない場合、アイテムを並べ替える機能は、結果を受け取った後にアプリケーション コードで行うことに限定されます。
ただし、次の構文を使用して、ソートキーを使用して DynamoDB の結果を降順または昇順でソートできます。
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
# true = ascending, false = descending
response = table.query(ScanIndexForward=False)
data = response["Items"]
Boto3 経由で DynamoDB のアイテムを取得する
DynamoDB データベースから特定の項目を取得する場合は、GetItem()
関数を使用します。
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
response = table.get_item(Key={primaryKeyName: "ID-1", sortKeyName: "SORT_2"})
Boto3 経由で DynamoDB の項目をスキャン
テーブル内のすべての情報は、スキャンによってアクセスできます。 データは、テーブル内の各項目を読み取った後、scan()
メソッドによって返されます。
FilterExpression
などの他の選択肢を追加すると、テーブル スキャン操作で返される結果が少なくなり、目的の結果が得られます。
from boto3.dynamodb.conditions import Key, Attr
import boto3
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Employees")
response = table.scan()
response["Items"]
print(response)
# or
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Employees")
response = table.scan(FilterExpression=Attr("Department").eq("IT"))
print("The query returned the following items:")
for item in response["Items"]:
print(item)
DynamoDB のグローバル セカンダリ インデックス
グローバル セカンダリ インデックスを使用して、メイン テーブルの主キーに含まれていないプロパティをクエリできます。 これを行うことで、全表スキャン手順によってもたらされる遅延と非効率性を回避できます。
グローバル セカンダリ インデックスにもプライマリ テーブルのプロパティが含まれますが、別のプライマリ キーを使用して構造化されるため、クエリが高速になります。
Boto3 を使用して DynamoDB テーブルをバックアップする
Boto3 を使用して DynamoDB テーブルのオンデマンド バックアップを作成するには、create_backup()
メソッドを使用して、バックアップ先のテーブル名とテーブル名を渡します。
import boto3
client = boto3.client("dynamodb")
response = client.create_backup(TableName="Employees", BackupName="Employees-Backup-01")
print(response)
まとめ
この記事では、Python Boto3 を使用して DynamoDB テーブルをクエリし、Amazon DynamoDB でその他の CRUD アクティビティを作成、一覧表示、および実行し、その他のメンテナンス タスクを実行する方法について説明しました。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn