Maison > Article > développement back-end > Interaction de base entre boto3 et dynamoDB sous python et comment sauvegarder et restaurer des tables
Référence : http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html
Récemment, en raison de besoins professionnels, j'ai étudié la partie dynamoDB de boto3 et j'ai acquis quelques informations . Résumons-le ici.
La première est l'installation de boto3 Sur une machine équipée de python et pip, exécutez
sudo pip install boto3
Dans la documentation officielle du site. , boto3 fournit Les interfaces pour interagir avec dynamoDB sont les suivantes :
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()
Pour parler franchement, cela signifie ajouter, supprimer, vérifier et modifier des tables et des enregistrements. Cet article décrit principalement les interfaces que j'ai utilisées récemment.
Pour utiliser boto3 en python, vous devez d'abord importer boto3. Bien sûr, cela n’a aucun sens. Pour faciliter l'utilisation, j'ai d'abord écrit un fichier de configuration au format json, comme suit :
{"region_name":"xxx","aws_access_key_id":"xxx","aws_secret_access_key":"xxx"}
puis encapsulé une classe spécifiquement utilisée pour faire fonctionner dynamoDB, Actuellement il n'y a rien
class dynamodb_operation():
Il faut une méthode pour lire le fichier 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
Depuis le fichier lu en mai Ce n'est pas au format json. Je veux juste qu'il signale une erreur puis quitte. Si vous ne voulez pas qu'il se ferme, modifiez-le simplement, sauf.
Ensuite, j'espère que cette classe a un client membre privé, et que la connexion est établie lorsque j'instancie l'objet, j'ai donc la méthode d'initialisation suivante :
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'])
Correspond au fichier de configuration précédent.
Avec cette fondation, vous pouvez encapsuler les méthodes que vous souhaitez utiliser. Les descriptions de chaque méthode sur le site officiel ne seront pas copiées.
1. Lister toutes les tables dans 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
La méthode list_table() ne peut obtenir que les noms de tables de 100 tables maximum à la fois, et chaque time Lorsqu'elle est renvoyée pour la première fois, la valeur avec la clé "LastEvaluatedTableName" est le nom de la dernière table, qui peut être utilisée comme paramètre dans la requête suivante. Dans cet appel en boucle, tous les noms de tables peuvent être obtenus. S’il n’y a pas de table plus tard, il n’y aura pas de LastEvaluatedTableName dans la réponse. Ici, je veux juste imprimer le nom de la table sur le terminal. Si vous souhaitez le sauvegarder, vous pouvez également le faire.
2. Obtenez les informations d'une certaine tablescribe_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"]
Ici, nous renvoyons simplement la réponse["Table"] telle qu'elle est, sans aucune autre. traitement. .
Si je veux connaître la taille d'une table, je peux :
def get_table_size(self,table): response = self.get_table_desc_only(table) stastic = {} stastic['TableSizeBytes'] = response['TableSizeBytes'] stastic['ItemCount'] = response['ItemCount']return stastic
Si je veux connaître d'autres informations et que je veux seulement connaître ces informations, Je peux également écrire la méthode correspondante.
3. Créer une table
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
Cela crée une table sans index. La création d'une table prend du temps, c'est pourquoi la méthode get_waiter() est utilisée.
4. Insérer des données
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
Cette méthode encapsulée doit passer dans un json correctement formaté, et la clé doit correspondre au tableau. Par exemple :
{'uid':{'N':'999'},'aid':{'N':'999'},'sid':{'N':'999'},'ksid':{'N':'999'}}
5. Supprimer le tableau
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'
À suivre...
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!