2017-07-31 27 views
0

我试图用PostgreSQL数据库创建的旧事件存储库 中的数据填充DynamoDB数据库。在运行db条目的很大一部分之后,尝试调用put_item函数时会引发此错误。AWS BotoCore错误 - AttributeValue不能包含空字符串

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

我决定重新运行代码,看看被倾出所有的表的属性发生了它所插入权利之前。

我能看到的只有“空字符串”是一本字典的answer_string属性,称为details,见下图: -

Importing event type 5 completed by user: 1933 
1933 5 {'answer': {'difficulty': 1, 'answer_string': ''}, 'card_id': n 
'13448', 'review_id': '153339', 'time_spent': 2431} 
62 153339 
2017-01-18 00:46:48.373009+00:00 2017-01-18 00:46:48.364217+00:00 

我敢肯定这是什么造成的错误被抛出,因为其他表格属性都不正确。

我的问题是details字典可以来自几十个不同的位置和每个details字典可以有不同的属性 - 一个与answer_string属性只是众多可能的字典配置之一。我无法检查字典的所有可能配置,并确认它们都没有空字符串。

有没有一种方法可以对字典进行一次全面检查,并查看它的任何一部分是否为空?

回答

1

如果你想获得一个包含所有空值的键的字典,你可以简单地将dictionary comprehension应用到details -dict中以获得所有键值对为空的值。例如:

empty_values = {key: value for key, value in details.items() if not value} 

如果你不是想筛选出具有空值的键值对,让你留下了一本字典,所有按键都值,只要使用相同的理解,而不not

details = {key: value for key, value in details.items() if value} 
+0

感谢您的建议 - 不幸的是,这只适用于最外面的键值对。密钥的值可能是另一个字典,并且该字典可能具有空值作为密钥。有没有办法将这种词典理解扩展到更深的范围? – dschnoll13

+0

如果当然,例如检查出以下问题及其答案:https://stackoverflow.com/questions/10756427/loop-through-all-nested-dictionary-values – Dunedan

+0

非常感谢 - 我可能必须写我自己的帮助函数然后完成这件事。我会给这个镜头 – dschnoll13

相关问题