我在 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
上,您将得到如下所示的内容:
在调用 update_item
时,您会得到类似以下内容:
这就是所讨论的预期结果。您可以阅读有关 UpdateExpression
here 的更多信息。
关于python - DynamoDB 更新多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63497448/