DynamoDB 更新多个值

DynamoDB Update Multiple values

我在 DynamoDB 中存储了以下 table:

{
    "name" :"A",
    "videos": [
        {
            "playlistId" : "ABCD"
            "title" : "Hello, world!"
        }
     ]
}

我想做成下面的:

{
    "name" :"A",
    "videos": [
        {
            "playlistId" : "ABCD"
            "title" : "Hello, world!"
        },
        {
            "playlistId" : "EFGH"
            "title" : "Bye, world!"
        },
        {
            "playlistId" : "IJKL"
            "title" : "Good morning, world!"
        }
     ]
}

我尝试使用 DynamoDB Create 操作来执行此操作,但它引发了 Duplicate Key 错误,因为所有三个视频对象都具有相同的主键(“名称”)。

现在,我正在尝试通过附加到列表来更新“视频”来做到这一点。当我这样做时,它会抛出不支持的类型错误。有人可以在这方面将我推向正确的方向吗?

你必须使用 UpdateExpression update_item boto3 API。以下是我尝试插入项目的代码:

import boto3
ddb_session = boto3.resource('dynamodb', region_name='us-east-1')
table = ddb_session.Table('test_table')
table.put_item(Item={
    'name': 'A',
    'videos': [
        {
            "playlistId": "ABCD",
            "title": "Hello, world!"
    }
]})

要更新项目 A,可以使用以下代码:

import boto3


ddb_session = boto3.resource('dynamodb', region_name='us-east-1')
table = ddb_session.Table('test_table')


table.update_item(
    Key={'name': 'A'},
    UpdateExpression='SET #VALUE = :value',
    ExpressionAttributeNames={
        '#VALUE': 'videos'
    },
    ExpressionAttributeValues={
        ':value': [
            {
                "playlistId": "ABCD",
                "title": "Hello, world!"
            },
            {
                "playlistId": "EFGH",
                "title": "Bye, world!"
            },
            {
                "playlistId": "IJKL",
                "title": "Good morning, world!"
            }
        ]
    },
)

现在让我们也看看输出。在 put_item 你会得到类似下面的内容:

调用 update_item 时,您会得到如下信息:

这是预期的问题。您可以阅读更多关于 UpdateExpression here