python - 使用 DynamoDB transact_write_items 如何对现有项目进行 ConditionCheck 并在 ConditionCheck 为 True 时放置新项目?
问题描述
仅当特定项目已存在时,我才想在表中插入新项目。是否可以使用 transact_write_items 来实现这一点?我想避免查询表然后插入新项目。
response = dynamo_client.transact_write_items(
TransactItems=[
{
'ConditionCheck': {
'Key': {
'indicator_id': {
'S': 'indicator_1'
}
},
'ConditionExpression': 'attribute_exists(#indicator_id)',
'ExpressionAttributeNames': {
'#indicator_id': 'indicator_id'
},
'TableName': 'CAS'
},
'Put': {
'Key': {
'indicator_id': {
'S': 'update_indicator_1'
}
},
'TableName': 'CAS'
}
}
]
)
这会引发以下错误:
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the TransactWriteItems operation: TransactItems can only contain one of Check, Put, Update or Delete
解决方案
您的参数TransactItems需要进行 2 处修改
json中的操作要重新安排
在 Put 操作中,将Key替换为Item
response = dynamo_client.transact_write_items(
TransactItems=[
{
'ConditionCheck': {
'Key': {
'indicator_id': {
'S': 'indicator_1'
}
},
'ConditionExpression': 'attribute_exists(#indicator_id)',
'ExpressionAttributeNames': {
'#indicator_id': 'indicator_id'
},
'TableName': 'CAS'
}
},
{
'Put': {
'Item': {
'indicator_id': {
'S': 'insert_indicator_2'
}
},
'TableName': 'CAS'
}
}
]
)
在文档(https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_write_items)中,即使在同一个字典中提到了所有操作,但仅适用于参考,应被视为 Check 或 Put 等
操作应该是此类字典的数组(列表)
推荐阅读
- java - 为什么 Java 9 集合工厂在支持可变参数时对每个参数都有单独的方法
- reactjs - 路由时,组件不在侧页中呈现
- javascript - 通过 MS Excel WebApp 中的 Office 脚本调用 API
- dialogflow-es - Google 助理 - askForPermission 从 Google 帐户获取用户电子邮件
- vue.js - 每次更改 VueJs 上的数据值时重做 api 调用
- gnuplot - gnuplot:在 GIF 终端中带有 3D 圆圈的视角相关颜色
- arduino - 用两个按钮运行两个 LED
- kubernetes - Openshift Cloudburst 工作节点到公共云?
- python - 在 pex 文件中选择自定义 python 环境/版本
- datatable - dash_table.DataTable 的行和列中的 html.Button