boto3 dynamodb 一些简单操作
# -*- coding:utf-8 -*- # @Time : 3/23/2020 11:42 AM # @Author : Mandy Lin # @File : call_dynamo.py # @Software : PyCharm import boto3 from pprint import pprint def __reform_item(item): new_item = {} for c in item.keys(): if isinstance(item[c], str): new_item[c] = {'S': item[c]} if isinstance(item[c], int): new_item[c] = {'N': str(item[c])} return new_item # use boto3 directly session = boto3.Session(profile_name='default', region_name='us-east-1') my_db = session.client(service_name='dynamodb') def scan_item(): table = my_db.scan(TableName='Music', FilterExpression='Artist = :a', ExpressionAttributeValues={ ':a': { 'S': 'Acme Band 2' }, },) pprint(table) print('----------------------------------------') # scan_item() Item = {'ObjectId': '7370e2ae-6da3-11ea-b2d6-989096dd40fd', 'Price': 399, 'ItemDescription': 'mouse'} def write_item(item): item = __reform_item(item) resp = my_db.put_item(TableName='demo_db', Item=item) print('--------input item----------------') print(item) print('--------output resp----------------') print(resp) # write_item(Item) key = {'ObjectId': 'c8e537026da011eabf53989096dd40fd'} # key = {'ItemDescription': 'mouse'} # key should be the primary key def get_item(key): key = __reform_item(key) resp = my_db.get_item(TableName='demo_db', Key=key) pprint(resp) print('---------------------------') # get_item(key) def tag_resource(ResourceArn, Tags): resp = my_db.tag_resource(ResourceArn=ResourceArn, Tags=Tags) pprint(resp) # user should be authorized to perform # tag_resource(ResourceArn='demo_db', Tags=[{'Key': 'demoKey', 'Value': 'demoValue'}]) def update_item_column(Key, UpdateExpression, ExpressionAttributeValues): key_ = __reform_item(Key) resp = my_db.update_item(TableName='demo_db', Key=key_, UpdateExpression=UpdateExpression, ExpressionAttributeValues=ExpressionAttributeValues, ReturnValues='UPDATED_NEW') pprint(resp) Key = {'ObjectId': '7370e2ae-6da3-11ea-b2d6-989096dd40fd'} UpdateExpression = 'SET ItemDescription = :label' # UpdateExpression = 'REMOVE ItemDescription' ExpressionAttributeValues = {':label': {'S': 'mouse22220--00'}} # ExpressionAttributeNames = # update item's value for a specific column # update_item_column(Key, UpdateExpression, ExpressionAttributeValues) def create_table(): response = my_db.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='Music' ) pprint(response) print('-------------------') # create_table() def batch_add_item(): response = my_db.batch_write_item( RequestItems={ 'Music': [ { 'PutRequest': { 'Item': { 'AlbumTitle': { 'S': 'No One You Know 4', }, 'Artist': { 'S': 'Python', }, 'SongTitle': { 'S': 'hello py world', }, }, }, }, { 'PutRequest': { 'Item': { 'AlbumTitle': { 'S': 'Move theme', }, 'Artist': { 'S': 'Jennifer Lawrence', }, 'SongTitle': { 'S': 'Hunger Game', }, }, }, }, { 'PutRequest': { 'Item': { 'AlbumTitle': { 'S': 'Blue Planet', }, 'Artist': { 'S': 'David Attenborough', }, 'SongTitle': { 'S': 'David Attenborough', }, }, }, }, ], }, ) pprint(response) # pprint(my_db.describe_table(TableName='Music')) batch_add_item() def batch_delete_item(): response = my_db.batch_write_item( RequestItems={ 'Music': [ { 'DeleteRequest': { 'Key': { 'Artist': { 'S': 'Acme Band', }, 'SongTitle': { 'S': 'Happy Day', }, }, }, }, ], }, ) pprint(response) def batch_get_item(): response = my_db.batch_get_item( RequestItems={ 'Music': { 'Keys': [ { 'Artist': { 'S': 'No One You Know', }, 'SongTitle': { 'S': 'Call Me Today', } }, ], 'AttributesToGet': [ 'AlbumTitle', ], 'ConsistentRead': True, } } ) pprint(response) # batch_delete_item() # batch_get_item()