我正在处理一个像这样的表。 表格名称:沙箱
Id name type
1 xyz
2 xx
3 xxx
4 yyyy private
我面临的问题是。
1)如果属性值为type
,则为空。基本上,我想设置一些如果此值为null。但是,dynamodb扫描只是跳过将其放入json响应中。
以下是我编写的python脚本。
dynamodb_resource = session.resource('dynamodb')
table_sandboxes = dynamodb_resource.Table('sandboxes')
response_sandboxes = table_sandboxes.scan()
def _myfun(box_id)
for i in response_sandboxes['Items']:
if box_id == i['id']:
if i['type'] == 'private':
return 'true'
else:
return 'false'
return 1
_myfun(2)
我遇到的错误是
KeyError: 'type'
所以, 1)有没有办法我可以扫描并获取属性值,即使它为null? 2)扫描是否是正确的方法? 3)如果桌子的尺寸较大,我是否还需要考虑分页器并进行处理?
对此我是陌生的,将不胜感激。
答案 0 :(得分:0)
DynamoDB将null
视为实际的data type,类似于数字或字符串。在上面的示例中,ID为1、2和3的项中的type
属性不是null
,只是不存在。在项目ID 4中,其数据类型为字符串。由于DynamoDB是无模式的,因此可以具有具有各种属性的项目(缺失或项目之间不同)。
解决代码错误的最简单方法是在以下项目中测试type
:
return True if i.get('type') == 'private' else False
您还可以将值作为type
类型存储在null
属性中(此处的命名方式会造成混淆),但是您不能在该属性中存储值private
。我认为那不是你想要的。
关于第二个问题,您怀疑scan
并不是最好的方法。 DynamoDB中的数据建模本身就是一个主题。 DynamoDB docs是开始学习它的好方法。如果要通过其type
属性来检索项目,则可以做的一件事就是创建一个GSI来完成此操作。