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!