やりたいこと
Python3を使って、DynamoDBのqueryを使って取得したJSONデータをPostgreSQLにINSERTしたい
実行環境
- AWS DynamoDB
- AWS Lambda
- Python3.6
- psycopg2.7.4
- AWS RDS(PostgreSQL9.6.6)
発生したエラー
json
を使ってダンプした結果、INSERT時にエラー発生。
import json
cur.execute(insert_query,json.dumps(hogehoge))
"errorMessage": "Object of type 'Decimal' is not JSON serializable", "errorType": "TypeError"
解決法
DynamoDBで使われているDecimal型をJSONに変換する。
import simplejson as json json.dumps(hogehoge)
そのまま書き換えると、lambda実行時にimportできないと怒られてしまう。
Unable to import module 'lambda_function': No module named 'simplejson'
解決法
simplejson
を使う。
まずはLambda関数の直下にインストールする。
-t .
もしくは、--target .
でカレントディレクトリにインストールできる。
$ pip install simplejson -t .
import simplejson
simplejson.dumps(hogehoge)
Lambda関数をzipに固めてAWSにアップロードする。
$ zip -r upload.zip *
参考情報その1
参考情報その2
narusemotoki.tumblr.com参考情報その3
simplejson — JSON encoder and decoder — simplejson 3.15.0 documentation
によると、json
よりもパフォーマンス上の利点があるとのこと。
ただ、以下の記事を見る限り、json
のほうが早い模様。
ujson
はもっと早い。