Maison  >  Article  >  développement back-end  >  Interaction de base entre boto3 et dynamoDB sous python et comment sauvegarder et restaurer des tables

Interaction de base entre boto3 et dynamoDB sous python et comment sauvegarder et restaurer des tables

巴扎黑
巴扎黑original
2017-07-22 11:27:412200parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:API Météo Yahoo avec Oauth1Article suivant:API Météo Yahoo avec Oauth1