Python 使用DynamoDB transact\u write\u items如何对现有项执行条件检查,并在条件检查为True时放置新项?

Python 使用DynamoDB transact\u write\u items如何对现有项执行条件检查,并在条件检查为True时放置新项?,python,amazon-web-services,amazon-dynamodb,boto3,dynamodb-queries,Python,Amazon Web Services,Amazon Dynamodb,Boto3,Dynamodb Queries,仅当特定项已存在时,我才希望在表中插入新项。是否可以使用transact\u write\u项目来实现这一点?我希望避免查询表,然后插入新项 response = dynamo_client.transact_write_items( TransactItems=[ { 'ConditionCheck': { 'Key': { 'indicator_id': {

仅当特定项已存在时,我才希望在表中插入新项。是否可以使用transact\u write\u项目来实现这一点?我希望避免查询表,然后插入新项

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

问题在于语法

正确的语法是:

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

在您的参数中需要进行2次修改TransactiveItems

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

在文档()中,即使所有操作都在相同的DICT中提及,但仅用于引用,并且应考虑为“检查”或“放置”或“等”/P> 操作应该是这样的dict的数组(列表)