django 如何开启事务?

django的版本为:2.0

1 . 声明事务      

  from django.db import transaction

     使用装饰器定义事务,在指定方法上进行修饰:

@transaction.atomic
def methond:
    pass

2. 开启事务

tid = transaction.savepoint()

3. 提交事务

transaction.savepoint_commit(tid)

4. 回滚事务

 transaction.savepoint_rollback(tid)

 

数据库中的原有记录为:

 测试, 第一次不回滚:

  @transaction.atomic
    def put(self, request, uid=None):
        r = Result()
        a = 1
        try:
            # 开启事务
            tid = transaction.savepoint()
            user = User(id=uid)
            user.username = "bingbing"
            user.save()
            raise Exception("出错了!")
            transaction.savepoint_commit(tid)
        except Exception as e:
            #transaction.savepoint_rollback(tid)
            r.error(e)
        return self.s_result(r)

访问结果:

{
    "code": -9,
    "message": "出错了!",
    "elapsed": 7
}

 出错了,但是在数据库中仍然更新成功 !

接下来在exception里,添加回滚事务的方法:

      transaction.savepoint_rollback(tid)

 @transaction.atomic
    def put(self, request, uid=None):
        r = Result()
        a = 1
        try:
            # 开启事务
            tid = transaction.savepoint()
            user = User(id=uid)
            user.username = "bingbing"
            user.save()
            raise Exception("出错了!")
            transaction.savepoint_commit(tid)
        except Exception as e:
            transaction.savepoint_rollback(tid)
            r.error(e)
        return self.s_result(r)

再次访问,访问结果:

{
    "code": -9,
    "message": "出错了!",
    "elapsed": 7
}

数据库并没有更新成功!  还是原来的记录, 通过开启事务来保证了更新数据库的一致性,成功就更新, 失败就回滚 ! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦钢铁侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值