Enregistrer DynamoDB x Python / Decimal

Mappage JSON vers Python

Les dictionnaires JSON et Python sont mappés comme suit:

JSON Python
object dict
array list
string unicode
number (int) int, long
number(real) float
true True
false False
null None

Par conséquent, si vous analysez JSON avec json.loads () et que vous l'enregistrez avec dynamo.put_item () tel quel, il sera enregistré avec le type ci-dessus. À ce stade, s'il existe un type float, il se met en colère comme suit.

Float types are not supported. Use Decimal types instead.

Les flottants Python ne peuvent pas être enregistrés dans DynamoDB tels quels. Vous devez plutôt vous inscrire avec Decimal.

Comment s'inscrire en tant que décimal au lieu de flottant?

Float doit être mappé sur Decimal. Par exemple, supposons que les données suivantes soient enregistrées.

json_data


{"Timestamp": "20160323T203501.000+0900", "x": -0.279938, "y": -0.754028, "z": -0.607758 }

Lors de l'analyse de JSON, ajoutez parse_float = decimal.Decimal comme indiqué ci-dessous.

import json
import boto3
import decimal
#...réduction
item = json.loads(json_data, parse_float=decimal.Decimal)
dynamo = boto3.resource('dynamodb').Table('ThisIsJustTest')
dynamo.put_item(Item = item)

Supplément

Cela a été mentionné dans le document officiel de Python, mais je n'ai pas obtenu d'informations tout de suite, alors je l'ai écrit sous forme d'article.

https://docs.python.org/2/library/json.html#encoders-and-decoders

parse_float, if specified, will be called with the string of every JSON float to be decoded. By default, this is equivalent to float(num_str). This can be used to use another datatype or parser for JSON floats (e.g. decimal.Decimal).

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

C'était également fluide dans la documentation AWS. https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.02.html

Au retour de Decimal

Les méthodes suivantes sont introduites.

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.03.html http://stackoverflow.com/questions/1960516/python-json-serialize-a-decimal-object

Recommended Posts

Enregistrer DynamoDB x Python / Decimal
Utiliser DynamoDB avec Python
Mémo de script DynamoDB (Python)
Gestion des points décimaux Python
Afficher les fractions en Python
compilateur x86 réalisé avec python
Mettez Python 3.x dans Ubuntu
Exécutez Tensorflow 2.x sur Python 3.7
2.x, 3.x code de caractères des séries python
Convertir le code python 3.x en python 2.x
Enregistrer le problème Redmine de Python
Principes de base de Python x SIG (3)
Installez Python 2.7.9 et Python 3.4.x avec pip.
Mémo Python Anaconda x Jupyter Notebook
Utilisez DynamoDB à partir de Python comme SQL.
Essayez l'accès au registre PLC en Python
Mémo de préparation au développement GitHub x Python
python x tensoflow x reconnaissance de visage d'image
Principes de base de Python x SIG (partie 2)
[Blender x Python] Maîtrisons au hasard !!
Convertir décimal en n-aire [python]
[Blender x Python] Maîtrisons la rotation !!
Création de paquetages CentOS 6.x x86_64 Python-2.7.4 rpm
Essayez d'utiliser Amazon DynamoDB à partir de Python