How to check if DynamoDB table exists?

前端 未结 6 2245
情话喂你
情话喂你 2021-02-01 01:06

I\'m a new user in boto3 and i\'m using DynamoDB.

I went through over the DynamoDB api and I couldn\'t find any method which tell me if a table is already e

6条回答
  •  别那么骄傲
    2021-02-01 01:11

    From reading the documentation, I can see that there are three methods by which you can check if a table exists.

    1. The CreateTable API throws an error ResourceInUseException if the table already exists. Wrap the create_table method with try except to catch this
    2. You can use the ListTables API to get the list of table names associated with the current account and endpoint. Check if the table name is present in the list of table names you get in the response.
    3. The DescribeTable API will throw an error ResourceNotFoundException if the table name you request doesn't exist.

    To me, the first option sounds better if you just want to create a table.

    Edit: I see that some people are finding it difficult to catch the exceptions. I will put some code below for you to know how to handle exceptions in boto3.

    Example 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
    

    Example 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,
        )
    

    Example 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
    

提交回复
热议问题