PutRequest¶
A PutRequest
is used to perform a put_item
transaction on DynamoDB. It is required that the Item
attribute includes the entire primary key (including the sort key if it is defined on the table)
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html
-
class
cerami.request.
PutRequest
(client, tablename='', request_attributes=None, reconstructor=None)¶ A class to perform the put_item request
-
__init__
(client, tablename='', request_attributes=None, reconstructor=None)¶ constructor for base request
- Parameters
client – A
boto3.client('dynamodb')
tablename – the name of the table to perform the request on
request_attributes –
a dict of SearchAttribute objects whose keys represent options that can be passed to client upon execution For example, it may include a FilterExpression key whose value is a SearchAttribute that resolves to a string of filters. This is typically None but can be used to manually build requests:
Parent.scan.filter(Parent.name == 'Mom').project(Parent.name) # The search_attributes can be manually specified ScanRequest(client=client, tablename='parents', search_attributes={ 'FilterExpression': SearchAttribute('name = Mom'), 'ProjectionExpression': SearchAttribute('name'), })
reconstructor – a Reconstructor object
-
add_attribute
(attr_class, name, value)¶ add a search attribute to a to the request_attributes dict
All search attributes must be unique keys. When the key already exists, it will update that value by calling
add()
. Depending on theattr_class
, this can overwrite, append, change the value of the existing search attribute.- Parameters
attr_class – a SearchAttribute class
name – the name of the attribute
value – the value that will be added to the SearchAttribute
For example:
Person.scan.limit(10) # or ... Person.scan.add_attribute(SearchAttribute, 'Limit', 10)
-
build
()¶ build the dict used by dynamodb
- Returns
a dict whose keys matching the keys of the request_attributes and whose values are string versions of each attribute
For example:
User.scan.filter(User.email == 'test@test.com').build() { "TableName": "Users", "FilterExpression": "#__email = :_email_dpxqm", "ExpressionAttributeNames": { "#__email": "email" }, "ExpressionAttributeValues": { ":_email_dpxqm": { "S": "test@test.com" } } }
-
execute
()¶ perform the put_item request
- Returns
a SaveResponse object built from the put_item response
For example:
Person.put.item({"email": {"S": "test@test.com"}}).execute()
-
item
(item_dict)¶ add the item_dict to the search_attributes
Adds the Item to the request_attributes dict
- Parameters
item_dict – a dict mapped to the DynamoDB format. Typically this is done through
Model.as_item()
- Returns
the caller of the method. This allows for chaining
For example:
person = Person(email="person@test.com") Person.put.item(person.as_item()) Person.put.item({"email": {"S": "test@test.com"}).build() { "TableName": "people", "Item": { "email": { "S": "test@test.com" } } }
-