gpt4 book ai didi

python - 使用 Boto 将无值插入 DynamoDB

转载 作者:太空狗 更新时间:2023-10-29 20:14:29 29 4
gpt4 key购买 nike

我是 Boto 的新手,我正在尝试使用它将 Python 字典插入 Amazon DynamoDB。我一定是遗漏了什么,因为“dynamizer”(编码器)似乎不支持 None 值。这是一个问题,因为源数据中有大量空值。我可以遍历每一行并删除值为 None 的所有键/值项,但不知何故我觉得像 Boto 这样复杂的包应该为我处理这个问题。我只是想像这样插入一行:

conn = DynamoDBConnection(region=RegionInfo(endpoint="dynamodb.us-west-2.amazonaws.com"))
dest = Table('d_company', connection=conn)
data = {"company_id":99999, "company_name":None}
dest.put_item(data)

...这给了我错误:

Error
Traceback (most recent call last):
File "TestDynamoDB.py", line 37, in testPutIntoDynamoDB
dest.put_item(data)
File "C:\Python27\lib\site-packages\boto\dynamodb2\table.py", line 452, in put_item
return item.save(overwrite=overwrite)
File "C:\Python27\lib\site-packages\boto\dynamodb2\items.py", line 362, in save
final_data = self.prepare_full()
File "C:\Python27\lib\site-packages\boto\dynamodb2\items.py", line 265, in prepare_full
final_data[key] = self._dynamizer.encode(value)
File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 228, in encode
dynamodb_type = self._get_dynamodb_type(attr)
File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 220, in _get_dynamodb_type
return get_dynamodb_type(attr)
File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 110, in get_dynamodb_type
raise TypeError(msg)
TypeError: Unsupported type "<type 'NoneType'>" for value "None"

我做错了什么?

最佳答案

DynamoDB 中的属性值既不能为空字符串,也不能为空集。虽然我凭经验发现了这一点,但我看到的最直接的引用是在这里:

http://awsdocs.s3.amazonaws.com/dynamodb/latest/dynamodb-dg.pdf

因此,已批准答案建议的第二个项目符号将不起作用。

已接受答案的第三个项目符号是最佳方法,正如已接受答案所暗示的那样。从设计的角度来看,它更接近于 NoSql 范例,并且可能会提供某种程度的效率,而不是尝试为每种数据类型识别 None/NULL 表示并存储它。然后,此范例在您的逻辑中表现为检查键的存在/成员资格(if/then 或 try/except,具体取决于场景),而不是检查键的“None/NULL 等效”值。

如果您真的想用等同于 NULL/None 的值来存储属性,我建议在您的应用程序中建立一个唯一/专有的值来实现这一点,这比字符串更容易识别,只是“无”。

(我宁愿简单地评论现有的答案,但我作为 stackoverflow 的新用户的身份显然阻止我这样做......希望这不是不礼貌......)

关于python - 使用 Boto 将无值插入 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698722/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com