python - 在 Python 中更新 DynomoDB 中的嵌套 JSON 结构
问题描述
我无法弄清楚如何使用 DynamoDB 和 Python 更新嵌套的 JSON 表。
我能够得到一些简单的工作,但现在我需要在我的数据库模式中有更深的嵌套结构,我无法弄清楚。
当“电话”属性值匹配(例如“+14086272826”)时,有人可以告诉我如何更新“alarm_log”列表吗?该表的键是“twilio_number”。
{
"twilio_number": "+18342388712",
"user_numbers": [
{
"alarm_log": [{
"date_sent": "10-20-19",
"alarm_type": "234",
"alarm_sms_sid": "SID32342352",
"acknowledged": "yes"
}],
"phone": "+14086272826"
},
{
"alarm_log": [{
"date_sent": "10-21-19",
"alarm_type": "534",
"alarm_sms_sid": "SID32342342352",
"acknowledged": "yes"
}],
"phone": "+14082064826"
}
]
}
在表的一个简单版本中,我使用此代码进行更新(将新数据附加到列表中),但使用新模式,我无法弄清楚如何更新与正确“电话”值匹配的正确“警报日志”。
UpdateExpression='SET alarm_log = list_append(alarm_log, :data_obj)',
ExpressionAttributeValues={
":data_obj": [
{
'date_sent': date_sent,
'alarm_type': alarm_type,
'alarm_sms_sid': alarm_sms_sid,
'acknowledged': 'yes'
}
]
}
谢谢你的帮助!
解决方案
如果您希望在一个请求中更新多个记录,则 dynamo 不支持。
如果您希望在一个请求中添加多条记录,请使用最多可以添加 25 个项目的batchwriteItem 。
如果要更新现有记录,请使用updateItem。与您的情况一样,您必须单独更新项目。
正如您所提到的,表的键是“twilio_number”。如果这是表的唯一键,则所有更新 alarm_log 的请求都将覆盖一个条目,并且在所有更新之后您将只有一项。
您可以根据电话号码创建范围/排序键(带有分区键 {twilio_number} + sort_key {phone_number} 的复合主键)。在更新时提供这些键来更新项目请求。
确保 twilio_number + phone_number 对于项目是唯一的,否则它将覆盖现有条目。
推荐阅读
- python - 给 scikit-learn 分类器自定义训练数据?
- lumen - 在 Lumen 5.7 中使用 Rollbar
- python - Bcp 命令进入 Microsoft Azure
- wordpress - Wordpress 高级自定义字段 - 在订单页面中包含跟踪号
- javascript - 检测何时使用 Angular 加载嵌入式 svg
- python - 从另一个模块访问 numpy 数组(与 python 数组相比)
- java - 以不同的方法将操作附加到 Stream 是一种不好的做法吗?
- html - Outlook 中的 HTML 电子邮件:长 URL 会导致链接断开
- javascript - JS作为Object单实例中的Array属性
- firebase - 清除所有数据的 Firestore 数据库?