Django事务的使用

from django.db import transaction # 导入事务

class XXX(APIView):

    @transaction.atomic
    # transaction.atomic装饰器可以保证该函数中所有的数据库操作都在一个事务中。
    def XXX(self,request):
    	 # 开启事务
            with transaction.atomic ():
                # 设置事务保存点
                s1 = transaction.savepoint ( )  # 可以设置多个保存点
                try:
                    # 数据库操作
                    for i in eval (Works.objects.filter (id=wid).first ( ).next_id):
                        Task.objects.filter(uid=i).update(state=state, opinion=opinion)
                except Exception as e:
                    # 事务回滚 (如果发生异常, 就回滚事务)
                    transaction.savepoint_rollback (s1)
                else:
                    # 提交事务 (如果没有异常,就提交事务)
                    transaction.savepoint_commit (s1)

导包transaction

设置该函数中的所有数据库操作在同一个事物中,第一个数据库操作1即使成功保存到数据库中,只要第2个数据操作失败,那么所有该段代码所有涉及的数据库操作都会更改回滚到原来。

@transaction.atomic
transaction.atomic装饰器可以保证该函数中所有的数据库操作都在一个事务中。

with transaction.atomic()
设置事务保存点并开启事务

s1 = transaction.savepoint() # 开启事务设置事务保存点
数据库读写操作

操作1

操作2

失败回滚事务(条件:任意一个操作失败,数据库操作发生异常,回滚到设置的事务保存点)
transaction.savepoint_rollback(s1)

成功(条件:操作1和2都成功,提交事务)

transaction.savepoint_commit(sid) # 如果没有异常,成功提交事务

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值