Note that there are some explanatory texts on larger screens.

plurals
  1. POPython Amazon Dynamodb how to reliably delete a database using boto?
    primarykey
    data
    text
    <p>The code below is intended to create a test database, but first delete it if it exists.</p> <p>First, the version information:</p> <pre><code>Python 2.7.4 (default, Apr 19 2013, 18:28:01) [GCC 4.7.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. &gt;&gt;&gt; import boto &gt;&gt;&gt; print(boto.Version) 2.19.0 &gt;&gt;&gt; </code></pre> <p>Running the code works the first time, but run it again immediately and it reports the following error:</p> <pre><code>ubuntu@mailapp.stat.com:~/stat/tools$ python js-dbd-test.py DynamoDB table: emails {u'Table': {u'AttributeDefinitions': [{u'AttributeName': u'messageid', u'AttributeType': u'S'}], u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 153, u'TableName': u'emails', u'TableStatus': u'ACTIVE', u'KeySchema': [{u'KeyType': u'HASH', u'AttributeName': u'messageid'}], u'ItemCount': 1, u'CreationDateTime': 1366430267.719}} DynamoDB table: notes {u'Table': {u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 0, u'ItemCount': 0, u'TableName': u'notes', u'TableStatus': u'DELETING'}} DynamoDB table: users {u'Table': {u'AttributeDefinitions': [{u'AttributeName': u'submissionid', u'AttributeType': u'S'}, {u'AttributeName': u'userid', u'AttributeType': u'S'}], u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 0, u'TableName': u'users', u'TableStatus': u'ACTIVE', u'KeySchema': [{u'KeyType': u'HASH', u'AttributeName': u'submissionid'}, {u'KeyType': u'RANGE', u'AttributeName': u'userid'}], u'ItemCount': 0, u'CreationDateTime': 1386161175.525}} Deleting table.... waiting.... ACTIVE ACTIVE Traceback (most recent call last): File "js-dbd-test.py", line 53, in &lt;module&gt; notes.delete() File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 341, in delete self.connection.delete_table(self.table_name) File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 519, in delete_table body=json.dumps(params)) File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1487, in make_request retry_handler=self._retry_handler) File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/connection.py", line 899, in _mexe status = retry_handler(response, i, next_sleep) File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1530, in _retry_handler data) boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request {u'message': u'Attempt to change a resource which is still in use: Table is being deleted: notes', u'__type': u'com.amazonaws.dynamodb.v20120810#ResourceInUseException'} (stat)[~/stat/tools] ubuntu@mailapp.stat.com:~/stat/tools$ </code></pre> <p>Can anyone suggest what I am doing wrong and a way to reliably delete and recreate Dynamodb databases?</p> <pre><code>from boto.dynamodb2 import regions from boto.dynamodb2.fields import HashKey, RangeKey, KeysOnlyIndex from boto.dynamodb2.layer1 import DynamoDBConnection from boto.dynamodb2.table import Table from boto.dynamodb2.types import NUMBER, STRING import boto global config import ConfigParser import sys import uuid from time import sleep config = ConfigParser.ConfigParser() config.read('~/status.conf') connection=DynamoDBConnection( aws_access_key_id=config.get("statusapplication", "accesskeyid"), aws_secret_access_key=config.get("statusapplication", "secretaccesskey"), host='dynamodb.us-west-1.amazonaws.com', region='us-west-1', ) #get and print list of tables tablenames = connection.list_tables().get('TableNames', None) for table in tablenames: print('DynamoDB table: %s' % table) print(connection.describe_table(table)) # delete table if it exists if 'notes' in tablenames: print('Deleting table....') notes = Table('notes', connection=connection) tablestatus = '' # gotta wait for the table to be ACTIVE before we can delete it count = 0 while tablestatus != 'ACTIVE': print('waiting....') sleep(2) tabledescription = connection.describe_table(table) tablestatus = tabledescription['Table']['TableStatus'] print(tablestatus) if count == 5: print('Timeout waiting for table to become ACTIVE, exiting.') sys.exit(1) count += 1 sleep(5) tablestatus = tabledescription['Table']['TableStatus'] print(tablestatus) notes = None notes = Table('notes', connection=connection) notes.delete() # wait for the table delete to complete count = 0 tabledescription = connection.describe_table(table) tablestatus = tabledescription['Table']['TableStatus'] while tablestatus == 'DELETING': sleep(2) tabledescription = connection.describe_table(table) tablestatus = tabledescription['Table']['TableStatus'] print(tablestatus) print(tabledescription) if count == 5: print('Table did not delete in under 10 seconds, exiting.') sys.exit(1) print('waiting....') count += 1 # create table if it does not exist if 'notes' not in tablenames: print('Creating table....') notes = Table.create('notes', schema=[ HashKey('noteid', data_type=STRING), ], throughput={ 'read': 1, 'write': 1, }, connection=connection) # wait for the table creation to complete count = 0 tablestatus = '' while tablestatus != 'ACTIVE': sleep(2) tabledescription = connection.describe_table(table) tablestatus = tabledescription['Table']['TableStatus'] print(tablestatus) print(tabledescription) if count == 5: print('Table did not create in under 10 seconds, exiting.') sys.exit(1) print('waiting....') count += 1 # get the table notes = Table('notes', connection=connection) sys.exit(0) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload