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

巴扎黑
Libérer: 2017-07-22 11:27:41
original
2230 Les gens l'ont consulté

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
Copier après la connexion

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()
Copier après la connexion

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"}
Copier après la connexion

puis encapsulé une classe spécifiquement utilisée pour faire fonctionner dynamoDB, Actuellement il n'y a rien

class dynamodb_operation():
Copier après la connexion

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
Copier après la connexion

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'])
Copier après la connexion

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
Copier après la connexion

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"]
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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'}}
Copier après la connexion

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'
Copier après la connexion

À 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal