Comment vérifier si table DynamoDB existe?
Je suis un nouvel utilisateur dans boto3 et je suis en utilisant DynamoDB
.
Je suis allé à travers les DynamoDB api et je ne pouvais pas trouver n'importe quelle méthode qui vous me dire si une table existe déjà.
Quelle est la meilleure façon de traiter ce problème?
Devrais-je essayer de créer une nouvelle table et l'enrouler à l'aide de try catch ?
- utilisation dynamodb-données-mappeur de vérifier fournit la fonction ensureTableExists, à create table if not exists
Vous devez vous connecter pour publier un commentaire.
À partir de la lecture de la documentation, je peux voir qu'il y a trois méthodes par lesquelles vous pouvez vérifier si une table existe.
ResourceInUseException
si la table existe déjà. Envelopper le create_table méthode à essayer sauf pour attraper cetteResourceNotFoundException
si le nom de la table que vous demandez n'existe pas.Pour moi, la première option sonne mieux si vous voulez juste pour créer une table.
Edit:
Je vois que certaines personnes trouvent qu'il est difficile d'attraper les exceptions. Je vais mettre un peu de code ci-dessous pour vous de savoir comment gérer les exceptions dans boto3.
Exemple 1
Exemple 2
Exemple 3
describe_table
- je obtenirAttributeError: 'dynamodb.ServiceResource' object has no attribute 'describe_table'
.dynamodb_client = boto3.client('dynamodb')
ClientError
importés à partir de?Vous pouvez utiliser décrire le tableau API pour déterminer si la table existe.
Exemple de code:
Si la table existe:-
Si la table n'existe pas:-
Vous obtiendrez
ResourceNotFoundException
botocore.errorfactory.ResourceNotFoundException: Une erreur s'est produite (ResourceNotF
oundException) lors de l'appel de la DescribeTable opération: Impossible de faire des opérations sur
une table inexistante
Une autre façon:-
botocore.errorfactory.ResourceNotFoundException
. Je reçoisAttributeError: 'module' object has no attribute 'ResourceNotFoundException'
. Je suis importésboto3
etbotocore
._cwevents_client: BaseClient = _master_session.client('events', region_name=aws_region) try: _cwevents_client.describe_rule(Name=ruleName) logger.info("Determined that guarddutyAlert rule already exists") except _cwevents_client.exceptions.ResourceNotFoundException: logger.info("Creating the guarddutyAlert CloudWatch rule")
dynamodb
. Lire mes accepté la réponse ci-dessus. Je suis sûr que vous pouvez trouver des exceptions semblables dans le cas decloudwatch events
trop.Vous pouvez utiliser .table_status attr de toute boto3 Tableau instance de l'objet. Il renvoie à son statut s'il existe (CRÉATION, mise à JOUR, SUPPRESSION, ACTIVE) ou throws exception
botocore.exceptions.ClientError: Requested resource not found: Table: <YOUR_TABLE_NAME> not found
. Vous pouvez envelopper les conditions dans try /except pour avoir plein d'infos sur la table actuelle de l'état.Autre approche, si vous ne voulez pas utiliser
boto3.client
mais seulementboto3.ressource
: