Heim  >  Artikel  >  Backend-Entwicklung  >  Grundlegende Interaktion zwischen boto3 und dynamoDB unter Python und Anleitung zum Sichern und Wiederherstellen von Tabellen

Grundlegende Interaktion zwischen boto3 und dynamoDB unter Python und Anleitung zum Sichern und Wiederherstellen von Tabellen

巴扎黑
巴扎黑Original
2017-07-22 11:27:412200Durchsuche

Referenz: http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html

Aus beruflichen Gründen habe ich kürzlich den DynamoDB-Teil von boto3 studiert und einige Erkenntnisse gewonnen . Fassen wir es hier zusammen.

Die erste ist die Installation von boto3. Führen Sie auf einem mit Python und Pip ausgestatteten Computer

sudo pip install boto3

In der offiziellen Website-Dokumentation aus , bietet boto3 Die Schnittstellen für die Interaktion mit dynamoDB lauten wie folgt:

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

Um es ganz klar auszudrücken bedeutet es das Hinzufügen, Löschen, Überprüfen und Ändern von Tabellen und Datensätzen. Dieser Artikel beschreibt hauptsächlich die Schnittstellen, die ich kürzlich verwendet habe.

Um boto3 in Python zu verwenden, müssen Sie zunächst boto3 importieren. Das ist natürlich Unsinn. Zur Vereinfachung der Verwendung habe ich zunächst eine Konfigurationsdatei im JSON-Format wie folgt geschrieben:

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

und dann eine Klasse gekapselt, die speziell für den Betrieb von dynamoDB verwendet wird. Derzeit gibt es nichts

class dynamodb_operation():

Es braucht eine Methode zum Lesen der JSON-Datei:

    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

Da die Datei im Mai gelesen wurde Es ist nicht im JSON-Format. Ich möchte nur, dass er einen Fehler meldet und dann beendet. Wenn Sie nicht möchten, dass es beendet wird, ändern Sie es einfach in „except“.

Dann hoffe ich, dass diese Klasse einen privaten Member-Client hat und die Verbindung hergestellt wird, wenn ich das Objekt instanziiere, sodass ich die folgende Initialisierungsmethode habe:

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

Entspricht der vorherigen Konfigurationsdatei.

Mit dieser Grundlage können Sie die Methoden zusammenfassen, die Sie verwenden möchten. Die Beschreibungen der einzelnen Methoden auf der offiziellen Website werden nicht kopiert.

1. Alle Tabellen in dynamoDB auflisten

    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

Die Methode list_table() kann jeweils nur die Tabellennamen von bis zu 100 Tabellen abrufen time Wenn dieses Mal zurückgegeben wird, ist der Wert mit dem Schlüssel „LastEvaluatedTableName“ der Tabellenname der letzten Tabelle, der als Parameter in der nächsten Anfrage verwendet werden kann. In diesem Schleifenaufruf können alle Tabellennamen abgerufen werden. Wenn später keine Tabelle vorhanden ist, enthält die Antwort keinen LastEvaluatedTableName. Hier möchte ich nur den Tabellennamen auf dem Terminal ausdrucken. Wenn Sie ihn speichern möchten, können Sie dies auch tun.

2. Holen Sie sich die Informationen einer bestimmten Tabelle discover_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"]

Hier geben wir einfach die Antwort["Tabelle"] so zurück, wie sie ist, ohne andere Verarbeitung.

Wenn ich die Größe einer Tabelle wissen möchte, kann ich:

    def get_table_size(self,table):
        response = self.get_table_desc_only(table)
        stastic = {}
        stastic['TableSizeBytes'] = response['TableSizeBytes']
        stastic['ItemCount'] = response['ItemCount']return stastic

Wenn ich andere Informationen wissen möchte und nur diese Informationen wissen möchte, Ich kann auch die entsprechende Methode schreiben.

3. Erstellen Sie eine Tabelle

    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

Hiermit wird eine Tabelle ohne Indizes erstellt. Das Erstellen einer Tabelle nimmt Zeit in Anspruch, daher wird die Methode get_waiter() verwendet.

4. Daten einfügen

    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

Diese gekapselte Methode muss einen korrekt formatierten JSON übergeben und der Schlüssel muss der Tabelle entsprechen. Zum Beispiel:

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

5. Tabelle löschen

    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'

Fortsetzung folgt...

Das obige ist der detaillierte Inhalt vonGrundlegende Interaktion zwischen boto3 und dynamoDB unter Python und Anleitung zum Sichern und Wiederherstellen von Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Yahoo Weather API mit OAuth1Nächster Artikel:Yahoo Weather API mit OAuth1