# Decimals and DynamoDB

- take your time to read it

A short note on DynamoDB of AWS and how it suprisingly gives `Decimals`

when you extract records. And forced me to write ducktape-code.

## The story #

DynamoDB implicitely converts integers to decimals. Decimals cause some problems in Python code since it is not a basic type. For example, `json.dumps()`

doesn't work anymore.

- You put a Python datastructure with lists and dictionairies into DynamoDB with strings and integers.
- DynamoDB converts and stores the datastructure
- You load an entry from DynamoDB
- ...it suddenly contains
`Decimals`

instead of integers - ...and
`json.dumps()`

crashes (among others)

## The 'solution' #

I now simply convert decimals back to `float`

and `int`

. The alternative of storing the object as a string (convert to JSON) I dislike. Figuring out how to configure DynamoDB...I couldn't find a decent way within half an hour. I did find a discussion on a feature request to disable decimals and/or find some sane way to work with it, but no solutions.

So I wrote a little function to convert a dictionary:

`def convert_decimal(dictionary):`

""" Converts decimals to float and int. """

for key in dictionary.keys():

value = dictionairy[key]

if isinstance(value, Decimal):

if v % 1 == 0:

dictionary[key] = int(value)

else:

dictionary[key] = float(value)

return dictionary