python dynamodb多表同步操作事务保证

dynamodb多表同时操作数据库事务保证

在操作dynamodb数据库时,存在需要保证多个表更新数据或插入数据都成功,如果使用先后顺序更新或插入很难保证都成功(暂时还不知道dynamodb有回退操作支持),以下以client和resource分别进行dynamodb transact_write_items函数讲解:

  1. 使用client低级api 同时插入两张表
import boto3
# 使用自己秘钥
db = boto3.client(service_name="dynamodb", region_name="us-west-2", aws_access_key_id="1111111",aws_secret_access_key="2222222")

res = db.transact_write_items(
            TransactItems=[
                {
                    'Put': {
                        'Item': {
                            "email": {"S": email},
                            "id": {"S": user_id},
                        },
                        "TableName": "user",
                        "ConditionExpression": "attribute_not_exists(id)",
                    }
                },
                {
                    'Put': {
                        'Item': {
                            "email": {"S": email},
                            "id": {"S": user_id + 1},
                        },
                        "TableName": "user_1",
                        "ConditionExpression": "attribute_not_exists(email)",
                    }
                }
            ]
        )

  1. 使用resource高级api 同时插入两张表
import boto3
# 使用自己秘钥
db = boto3.resource(service_name="dynamodb", region_name="us-west-2", aws_access_key_id="1111111",aws_secret_access_key="2222222")

res = db.meta.client.transact_write_items(
            TransactItems=[
                {
                    'Put': {
                        'Item': {
                            "email": email,
                            "id": user_id,
                        },
                        "TableName": "user",
                        "ConditionExpression": "attribute_not_exists(id)",
                    }
                },
                {
                    'Put': {
                        'Item': {
                            "email": email,
                            "id": user_id + 1,
                        },
                        "TableName": "user_1",
                        "ConditionExpression": "attribute_not_exists(email)",
                    }
                }
            ]
        )

主要区别在于resource可以不指定Item内部属性的类型,会自动进行识别;再者可以使用 meta.client支持低级api

更多相关信息 :https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.get_item

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值