python - DynamoDB 更新多个值

标签 python amazon-web-services aws-lambda amazon-dynamodb

我在 DynamoDB 中存储了下表:

{
    "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 操作来执行此操作,但它引发了重复键错误,因为所有三个视频对象都具有相同的主键(“名称”)。

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

最佳答案

您必须使用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 上,您将得到如下所示的内容:

enter image description here

在调用 update_item 时,您会得到类似以下内容:

enter image description here

这就是所讨论的预期结果。您可以阅读有关 UpdateExpression here 的更多信息。

关于python - DynamoDB 更新多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63497448/

相关文章:

python - 从 Excel 文档获取超链接 URL

python - 检查列表值并将其分配给 python 中的字典键

amazon-web-services - Azure 应用服务与 AWS SES 的通信

python - 编写用于 AWS Lambda 的异步代码的正确方法是什么?

javascript - AWS Lambda Node Js JSON 未定义

amazon-web-services - 无法从我的 vpc 配置的 lambda 函数连接 dynamoDb

python - 错误处理(除以零)

python - 将 string.format() 应用于 Pandas DataFrame 中的行

amazon-web-services - AWS Elastic Beanstalk 和 Secret Manager

amazon-web-services - 允许使用 Cognito 访问 S3 上的自定义前缀