Boto3を使ったら空文字のままだとDynamoDBにデータが入れられなかった話
DynamoDBから怒られる
Boto3を使ってDynamoDBにデータを入れようとしました。
下記のようなものです。
{
'accountId': '12345',
'date': '2017-09-20',
'list': ['aaa', 'a', ''],
'name': 'aaa'
}
結果、
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: An AttributeValue may not contain an empty string
怒られました。
そこで
下記のような関数をつくりました。辞書オブジェクト(登録するJSON)を引数で与えて、空文字をNoneで上書きます。
def emptystr_to_none(item):
for k, v in item.items():
if isinstance(v, dict):
TrustedAdvisorCheck.json_parse(v)
elif isinstance(v, list):
for i in range(len(v)):
list_elem = v[i]
if isinstance(list_elem, str):
if list_elem == '':
v[i] = None
elif isinstance(list_elem, list) or isinstance(list_elem, dict):
TrustedAdvisorCheck.json_parse(list_elem)
elif isinstance(v, str):
if v == '':
item[k] = None
return item
結果
下記のように変換して、登録できました。
{
'accountId': '12345',
'date': '2017-09-20',
'list': ['aaa', 'a', None],
'name': 'aaa'
}
Author And Source
この問題について(Boto3を使ったら空文字のままだとDynamoDBにデータが入れられなかった話), 我々は、より多くの情報をここで見つけました https://qiita.com/t-fuku/items/0ad85c245f62883a4d11著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .