在DynamoDB中创建嵌套贴图

2024-09-30 16:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个新地图,同时也为它指定一个新值

这是我要存储在数据库中的数据格式:

{
    "user_id": 1,
    "project_id": 1,
    "MRR": {
         "NICHE": {
             "define your niche": {
                   "vertical": "test",
                   "ideal prospect": "He is the best"
             }
         },
         "Environment": {
             "Trend 1": {
                   "description": "something"
             },
             "Trend 2": {
                   "description": "something else"
             }
         }

    }

}

到目前为止,我插入数据的代码是:

def update_dynamo(user_id, project_id, group, sub_type, data):
    dynmoTable.update_item(
        Key = {
            "user_id": user_id
        },
        ConditionExpression=Attr("project_id").eq(project_id),
        UpdateExpression="SET MRR.#group = :group_value",
        ExpressionAttributeNames={
            "#group": group
        },
        ExpressionAttributeValues={
            ":group_value": {}
        }
    )

    dynmoTable.update_item(
        Key={
            "user_id": user_id
        },
        ConditionExpression=Attr("project_id").eq(project_id),
        UpdateExpression="SET MRR.#group.#subgroup = :sub_value",
        ExpressionAttributeNames={
             "#group": group,
             '#subgroup': sub_type
        },
        ExpressionAttributeValues={
             ":sub_value": data
        }
     )
data = {
    "description": "world",
}
if __name__ == "__main__":
    update_dynamo(1, 1, "New Category", "Hello", data)

我的问题是这两个更新项是否可以合并为一个


Tags: projectiddatavaluetypegroupupdatedescription
1条回答
网友
1楼 · 发布于 2024-09-30 16:20:37

当然,您可以将整个嵌套的“文档”分配给顶级属性,而不需要只分配标量

像这样的方法应该会奏效:

    dynmoTable.update_item(
        Key = {
            "user_id": user_id
        },
        ConditionExpression=Attr("project_id").eq(project_id),
        UpdateExpression="SET MRR.#group = :group_value",
        ExpressionAttributeNames={
            "#group": group
        },
        ExpressionAttributeValues={
            ":group_value": {sub_type: sub_data}
        }
    )

请注意如何将“group”属性设置为Python字典{subtype: sub_data}。正如您所期望的,boto3将把这个字典转换成适当的DynamoDB映射属性。您可以在一次更新中设置复杂的嵌套字典、列表,并以这种方式相互嵌套

相关问题 更多 >