使用DynamoDB transact_write_items如何对现有项执行条件检查,如果ConditionCheck为True,则放置新项?

2024-10-04 11:28:50 发布

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

我只想在表中插入一个新项,前提是某个特定项已经存在。有没有可能使用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'
            }
        }
    ]
)

这将引发以下错误:

^{pr2}$

Tags: keyclientidresponseitemsindicatorwritedynamo
2条回答

参数2中需要修改

json中的操作应该重新安排

在输入操作中将替换为

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)中,即使所有操作都在同一个dict中提到,但仅供参考,应视为Check或Put or等

操作应该是这样的dict的数组(列表)

问题出在语法上。在

正确的语法是:

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'
            }
        }
    ]
)

相关问题 更多 >