ホームページ  >  記事  >  バックエンド開発  >  Python での boto3 と dynamoDB 間の基本的な対話と、テーブルのバックアップと復元の方法

Python での boto3 と dynamoDB 間の基本的な対話と、テーブルのバックアップと復元の方法

巴扎黑
巴扎黑オリジナル
2017-07-22 11:27:412225ブラウズ

参考: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
これはインデックスのないテーブルを作成します。テーブルの作成には時間がかかるため、get_waiter() メソッドが使用されます。

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"]
このカプセル化方法では、正しい形式で JSON を渡す必要があり、キーがテーブルに対応している必要があります。例:

    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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。