ホームページ >バックエンド開発 >Python チュートリアル >Python での boto3 と dynamoDB 間の基本的な対話と、テーブルのバックアップと復元の方法
参考:http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html
最近、仕事の都合でboto3のdynamoDB部分を勉強しており、ある程度の経験があるので、ここにまとめます。
最初に、Python と pip を備えたマシンで
sudo pip install boto3
を実行します。
公式 Web サイトのドキュメントでは、dynamoDB と対話するために boto3 によって提供されるインターフェイスは次のとおりです。率直に言うと、テーブルとレコードの追加、削除、確認、変更です。この記事では主に私が最近使用したインターフェイスについて説明します。
Python で boto3 を使用するには、まず boto3 をインポートする必要があります。もちろん、これはナンセンスです。使いやすいように、最初に次のように設定ファイルを json 形式で作成しました。次に、dynamoDB の操作に特に使用されるクラスをカプセル化しました。現時点では、読み取りが必要なものはありません。 json ファイルのメソッド:
batch_get_item() batch_write_item() can_paginate() create_table() delete_item() delete_table() describe_limits() describe_table() describe_time_to_live() generate_presigned_url() get_item() get_paginator() get_waiter() list_tables() list_tags_of_resource() put_item() query() scan() tag_resource() untag_resource() update_item() update_table() update_time_to_live()
読み込んだファイルが json 形式ではない可能性があるので、エラーを報告して終了してほしいだけです。終了したくない場合は、例外を変更してください。
{"region_name":"xxx","aws_access_key_id":"xxx","aws_secret_access_key":"xxx"}
は、前の設定ファイルに対応します。
1. dynamoDB のすべてのテーブルをリストする
class dynamodb_operation():
list_table() メソッドは一度に最大 100 テーブルのテーブル名しか取得できません。返されるたびに、キー「LastEvaluatedTableName」を持つ値が最後のものになります。テーブルのテーブル名は、次のリクエストのパラメータとして使用できます。このループ呼び出しでは、すべてのテーブル名を取得できます。後でテーブルがない場合、応答には LastEvaluatedTableName は含まれません。ここではテーブル名を端末に出力したいだけで、保存したい場合はそれも可能です。
2. あるテーブルの情報を取得するdescribe_table()
def load_json(self,path):try: with open(path) as json_file: data = json.load(json_file)except Exception as e:print 'ERROR: no such file like ' + path exit(-1)else:return data
ここでは何も処理せずにresponse["Table"]をそのまま返します。
テーブルのサイズを知りたい場合は、次のようにすることができます:
def __init__(self,path): conf = self.load_json(path) self.client = boto3.client('dynamodb',region_name=conf['region_name'],aws_access_key_id=conf['aws_access_key_id'], aws_secret_access_key=conf['aws_secret_access_key'])
3. テーブルを作成します
def list_all_table(self): page=1LastEvaluationTableName = ""while True:if page == 1: response = self.client.list_tables()else: response = self.client.list_tables( ExclusiveStartTableName=LastEvaluationTableName ) TableNames = response['TableNames']for table in TableNames:print tableif response.has_key('LastEvaluatedTableName'): LastEvaluationTableName = response["LastEvaluatedTableName"]else:breakpage += 1
4. データを挿入する
def get_table_desc_only(self,table):try: response = self.client.describe_table(TableName=table)except Exception as e:print 'ERROR: no such table like ' + table exit(-1)else:return response["Table"]
def get_table_size(self,table): response = self.get_table_desc_only(table) stastic = {} stastic['TableSizeBytes'] = response['TableSizeBytes'] stastic['ItemCount'] = response['ItemCount']return stastic
5、テーブルの削除
def create_table(self,tablename,keySchema,attributeDefinitions,provisionedThroughput): table = self.client.create_table( TableName=tablename, KeySchema=keySchema, AttributeDefinitions=attributeDefinitions, ProvisionedThroughput=provisionedThroughput )# Wait until the table exists.self.client.get_waiter('table_exists').wait(TableName=tablename) response = self.client.describe_table(TableName=tablename)print response
続きます...
以上がPython での boto3 と dynamoDB 間の基本的な対話と、テーブルのバックアップと復元の方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。