75

Using python in AWS Lambda, how do I put/get an item from a DynamoDB table?

In Node.js this would be something like:

dynamodb.getItem({
    "Key": {"fruitName" : 'banana'},
    "TableName": "fruitSalad"
}, function(err, data) {
    if (err) {
        context.fail('Incorrect username or password');
    } else {
        context.succeed('yay it works');
    }
});

All I need is the python equivalent.

3

4 Answers 4

110

Using Boto3 (Latest AWS SDK for python)

You import it with

import boto3

Then call the client via

dynamodb = boto3.client('dynamodb')

Get item example

dynamodb.get_item(TableName='fruitSalad', Key={'fruitName':{'S':'Banana'}})

Put item example

dynamodb.put_item(TableName='fruitSalad', Item={'fruitName':{'S':'Banana'},'key2':{'N':'value2'}})

'S' indicates a String value, 'N' is a numeric value

For other data types refer http://boto3.readthedocs.org/en/latest/reference/services/dynamodb.html#DynamoDB.Client.put_item

Sign up to request clarification or add additional context in comments.

6 Comments

any idea how to convert an actual dict that you'd use in python into amazon's crazy structure?
RyanTuck if you use resource and table it is not necessary and you can use your dict. dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(TableName) table.put_item({"fruitName" : 'banana'})
Ryan Tuck question is very legit. When you need to use attribute_not_exists ConditionExpression, it is only possible using the client and not the resource. So when using the client you have to deal with the stupid formatting of boto3 low level client ....
Keep in mind that if you created a primary key with a secondary key associated, you need to query for both of them
confused as to when I have to tell boto3, which is after all python, what the type of a parameter is. I have seen examples that do not that seem to work.
|
54

Using latest AWS SDK

import boto3

def lambda_handler(event, context):
    # this will create dynamodb resource object and
    # here dynamodb is resource name
    client = boto3.resource('dynamodb')

    # this will search for dynamoDB table 
    # your table name may be different
    table = client.Table("dynamoDB")
    print(table.table_status)

    table.put_item(Item= {'id': '34','company':  'microsoft'})

If your are using AWS you can use this code sample, only you have to give permissions to this lambda function, you can find details in link

2 Comments

this is an apt answer as I am facing issues with boto3.client. Also, additional formatting is required in client!
this is what I'm looking for, thanks. I'm running Dynamo using Docker on localhost:9999. After creating the table without exception, the print(table.table_status) statement returns botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the DescribeTable operation: Cannot do operations on a non-existent table
23

full example:

import boto3

def lambda_handler(event, context):

    client = boto3.client('dynamodb')

    for record in event['Records']:
        # your logic here...
        try:
            client.update_item(TableName='dynamo_table_name', Key={'hash_key':{'N':'value'}}, AttributeUpdates={"some_key":{"Action":"PUT","Value":{"N":'value'}}}) 
        except Exception, e:
            print (e)

please note that you need to decide when to use 'update_item' or 'put_item'.

with 'update_item' you ensure to have only one record with the same hash/range. if the record exists it can update this record, else it will create it

http://boto3.readthedocs.org/en/latest/reference/services/dynamodb.html#DynamoDB.Client.update_item

1 Comment

I don't see where the original had anything to do with lambdas.
7

You can use below lines to write and read from the DynamoDB Table:

First, import the boto3 package

import boto3

Create an object for dynamoDB

dynamodb = boto3.resource('dynamodb')

Select your specific table

table = dynamodb.Table("fruitSalad")

Write:

table.put_item(Item= {'fruitName': 'Banana'})

Read:

table.get_item(Key={'fruitName': 'Banana'})

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.