Boto3 and AWS DynamoDB usage…
http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html
$ cat dynamodbTest.pyimport boto3
#dynamodb = boto3.resource('dynamodb')# Hard coding strings as credentials, not recommended. Use configs or env variables AWS_ACCESS_KEY, AWS_SECRET_KEYdynamodb = boto3.resource( 'dynamodb', aws_access_key_id='KEY_ID_REMOVED', aws_secret_access_key='ACCESS_KEY_REMOVED', region_name = 'us-east-1')
def create_table(tableName): table = dynamodb.create_table( TableName=tableName, KeySchema=[ { 'AttributeName': 'username', 'KeyType': 'HASH' }, { 'AttributeName': 'last_name', 'KeyType': 'RANGE' } ], AttributeDefinitions=[ { 'AttributeName': 'username', 'AttributeType': 'S' }, { 'AttributeName': 'last_name', 'AttributeType': 'S' }, ], ProvisionedThroughput={ 'ReadCapacityUnits': 1, 'WriteCapacityUnits': 1 } )
table.meta.client.get_waiter('table_exists').wait(TableName=tableName) print 'Table item count: {}'.format(table.item_count)
def delete_table(tableName): table = dynamodb.Table(tableName) table.delete()
def put_item(tableName): table = dynamodb.Table(tableName)
response = table.put_item( Item={ 'username': 'jdoe', 'first_name': 'jane', 'last_name': 'doe', 'age': 20, 'account_type': 'librarian', } )
print response
def get_item(tableName): table = dynamodb.Table(tableName)
response = table.get_item( Key={ 'username': 'jdoe', 'last_name': 'doe' } )
item = response['Item'] name = item['first_name']
print(item) print("Hello, {}" .format(name))
def update_item(tableName): table = dynamodb.Table(tableName)
table.update_item( Key={ 'username': 'jdoe', 'last_name': 'doe' }, UpdateExpression='SET age = :val1', ExpressionAttributeValues={ ':val1': 23 } )
def delete_item(tableName): table = dynamodb.Table(tableName)
table.delete_item( Key={ 'username': 'jdoe', 'last_name': 'doe' } )
def batch_write(tableName): table = dynamodb.Table(tableName)
with table.batch_writer() as batch: batch.put_item( Item={ 'account_type': 'end_user', 'username': 'bbob', 'first_name': 'billy', 'last_name': 'bob', 'age': 20, 'address': { 'road': '1 fake street', 'city': 'Houston', 'state': 'TX', 'country': 'USA' } } ) batch.put_item( Item={ 'account_type': 'librarian', 'username': 'user1', 'first_name': 'user1 first name', 'last_name': 'user1 last name', 'age': 20, 'address': { 'road': '10 fake street', 'city': 'Dallas', 'state': 'TX', 'country': 'USA' } } ) batch.put_item( Item={ 'account_type': 'end_user', 'username': 'user2', 'first_name': 'user2 first name', 'last_name': 'user2 last name', 'age': 23, 'address': { 'road': '12 fake street', 'city': 'Austin', 'province': 'TX', 'state': 'USA' } } )
def create_multiple_items(tableName,itemCount):
table = dynamodb.Table(tableName)
with table.batch_writer() as batch: for i in range(itemCount): batch.put_item( Item={ 'account_type': 'anonymous', 'username': 'user-' + str(i), 'first_name': 'unknown', 'last_name': 'unknown' } )
def query(tableName): from boto3.dynamodb.conditions import Key, Attr table = dynamodb.Table(tableName)
response = table.query( KeyConditionExpression=Key('username').eq('user2') )
items = response['Items'] print(items)
def scan(tableName): from boto3.dynamodb.conditions import Key, Attr
table = dynamodb.Table(tableName)
response = table.scan( FilterExpression=Attr('age').gt(23) )
items = response['Items'] print(items)
len(items) for x in range(len(items)): items[x]['username']
def query_filter(tableName): from boto3.dynamodb.conditions import Key, Attr
table = dynamodb.Table(tableName)
response = table.scan( FilterExpression=Attr('first_name').begins_with('r') & Attr('account_type').eq('librarian') )
items = response['Items'] print(items)
# Comment/uncomment below to play with the different functions#create_table('staff')
#put_item('staff')#get_item('staff')#update_item('staff')#delete_item('staff')
#batch_write('staff')
#create_multiple_items('staff', 100)
#query('staff')#scan('staff')#query_filter('staff')
#delete_table('staff')