>  기사  >  백엔드 개발  >  Python에서 boto3과 dynamoDB 간의 기본 상호 작용 및 테이블 백업 및 복원 방법

Python에서 boto3과 dynamoDB 간의 기본 상호 작용 및 테이블 백업 및 복원 방법

巴扎黑
巴扎黑원래의
2017-07-22 11:27:412226검색

참고자료: http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html

최근 업무상의 필요로 인해 boto3의 dynamoDB 부분을 공부했고, 경험도 좀 있어서 여기에 요약하겠습니다.

첫 번째 단계는 Python 및 pip가 있는 머신에서

sudo pip install boto3

를 실행하는 것입니다. 공식 웹 사이트 문서에서 boto3는 dynamoDB와 상호 작용하기 위해 다음 인터페이스를 제공합니다.

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()

즉, 테이블과 레코드를 추가, 삭제, 확인 및 수정하는 것입니다. 이 글에서는 제가 최근에 사용한 인터페이스를 중심으로 설명합니다.

파이썬에서 boto3를 사용하려면 먼저 boto3를 가져와야 합니다. 물론 이것은 말도 안되는 일입니다. 사용 편의성을 위해 먼저 다음과 같이 json 형식으로 구성 파일을 작성했습니다.

{"region_name":"xxx","aws_access_key_id":"xxx","aws_secret_access_key":"xxx"}

그런 다음 dynamoDB를 작동하는 데 특별히 사용되는 클래스를 캡슐화했습니다. 현재는 아무것도 없습니다.

class dynamodb_operation():

읽기가 필요합니다. json 파일 방법:

    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

읽은 파일이 json 형식이 아닐 수 있으므로 오류를 보고하고 종료하기만 하면 됩니다. 종료하고 싶지 않다면, 제외를 변경하면 됩니다.

그러면 이 클래스에 private 멤버 클라이언트가 있고 개체를 인스턴스화할 때 연결이 설정되기를 바랍니다. 따라서 다음과 같은 초기화 방법이 있습니다.

    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'])

은 이전 구성 파일에 해당합니다.

이 기반을 사용하면 사용하려는 방법을 캡슐화할 수 있습니다. 공식 홈페이지의 각 방법에 대한 설명은 복사되지 않습니다.

1. dynamoDB의 모든 테이블 나열

    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

list_table() 메서드는 한 번에 최대 100개의 테이블 이름만 가져올 수 있으며, 반환될 때마다 "LastEvaluatedTableName" 키가 있는 값이 마지막입니다. 테이블의 테이블 이름은 다음 요청에서 매개변수로 사용될 수 있습니다. 이 루프 호출에서는 모든 테이블 이름을 얻을 수 있습니다. 나중에 테이블이 없으면 응답에 LastEvaluatedTableName이 없습니다. 여기서는 테이블 이름을 터미널에 인쇄하고 싶습니다. 저장하고 싶다면 그렇게 할 수도 있습니다.

2. 특정 테이블의 정보를 가져옵니다. explain_table()

    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"]

여기서는 다른 처리 없이 응답["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

다른 정보를 알고 싶고 해당 정보만 알고 싶다면 해당 방법을 작성할 수도 있습니다.

3. 테이블 만들기

    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

인덱스 없이 테이블을 만드는 것입니다. 테이블을 생성하는데 시간이 걸리기 때문에 get_waiter() 메소드를 사용합니다.

4. 데이터 삽입

    def put_item(self,tableName,item):try:
            self.client.put_item(
                    TableName=tableName,
                    Item=item
                    )except Exception as e:print 'ERROR: put item fail. msg: ' + str(e)
            exit(-1)else:return

이 캡슐화 방법은 올바른 형식으로 json을 전달해야 하며 키는 테이블과 일치해야 합니다. 예:

{'uid':{'N':'999'},'aid':{'N':'999'},'sid':{'N':'999'},'ksid':{'N':'999'}}

5, 테이블 삭제

    def delete_table(self,table):try:
            self.client.delete_table(
                    TableName=table
                    )   except Exception as e:print 'ERROR: delete table ' + table + ' fail. msg: ' + str(e)else:print 'delete table ' + table + ' succ'

계속...

위 내용은 Python에서 boto3과 dynamoDB 간의 기본 상호 작용 및 테이블 백업 및 복원 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.