En lisant la documentation, je constate qu'il existe trois méthodes permettant de vérifier si une table existe.
- Le site API CreateTable lance une erreur
ResourceInUseException
si la table existe déjà. Enveloppez la méthode create_table avec try except pour attraper ceci
- Vous pouvez utiliser le API ListTables pour obtenir la liste des noms de table associés au compte et au point de terminaison actuels. Vérifiez si le nom de la table est présent dans la liste des noms de table que vous obtenez dans la réponse.
- Le site API DescribeTable entraînera une erreur
ResourceNotFoundException
si le nom de la table que vous demandez n'existe pas.
Pour moi, la première option semble meilleure si vous voulez simplement créer un tableau.
Edit : Je vois que certaines personnes ont du mal à saisir les exceptions. Je vais mettre un peu de code ci-dessous pour que vous sachiez comment gérer les exceptions dans boto3.
Exemple 1
import boto3
dynamodb_client = boto3.client('dynamodb')
try:
response = dynamodb_client.create_table(
AttributeDefinitions=[
{
'AttributeName': 'Artist',
'AttributeType': 'S',
},
{
'AttributeName': 'SongTitle',
'AttributeType': 'S',
},
],
KeySchema=[
{
'AttributeName': 'Artist',
'KeyType': 'HASH',
},
{
'AttributeName': 'SongTitle',
'KeyType': 'RANGE',
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5,
},
TableName='test',
)
except dynamodb_client.exceptions.ResourceInUseException:
# do something here as you require
pass
Exemple 2
import boto3
dynamodb_client = boto3.client('dynamodb')
table_name = 'test'
existing_tables = dynamodb_client.list_tables()['TableNames']
if table_name not in existing_tables:
response = dynamodb_client.create_table(
AttributeDefinitions=[
{
'AttributeName': 'Artist',
'AttributeType': 'S',
},
{
'AttributeName': 'SongTitle',
'AttributeType': 'S',
},
],
KeySchema=[
{
'AttributeName': 'Artist',
'KeyType': 'HASH',
},
{
'AttributeName': 'SongTitle',
'KeyType': 'RANGE',
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5,
},
TableName=table_name,
)
Exemple 3
import boto3
dynamodb_client = boto3.client('dynamodb')
try:
response = dynamodb_client.describe_table(TableName='test')
except dynamodb_client.exceptions.ResourceNotFoundException:
# do something here as you require
pass
0 votes
Utiliser la fonction ensureTableExists de dynamodb-data-mapper check provides, pour créer une table si elle n'existe pas.