码迷,mamicode.com
首页 > 数据库 > 详细

Django数据库--事务及事务回滚

时间:2019-11-28 13:21:42      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:执行   https   nsa   实现   部分   行操作   功能   数据库数据   django数据库   

二、保存点Savepoint(断点回滚)

保存点是事务中的标记,从原理实现上来说是一个类似存储结构的类。可以回滚部分事务,而不是完整事务,同时会保存部分事务。python后端程序可以使用保存点。

一旦打开事务atomic(),就会构建一系列等待提交或回滚的数据库操作。通常,如果发出回滚命令,则会回滚整个事务。保存点则提供了执行细粒度回滚的功能,而不是将执行的完全回滚transaction.rollback()。

 

工作原理:savepoint通过对返回sid后面的将要执行的数据库操作进行计数,并保存在内置的列表中,当对数据库数据库进行操作时遇到错误而中断,根据sid寻找之前的保存点并回滚数据,并将这个操作从列表中删除。

 

相关API:

1. savepoint(using = None)

创建一个新的保存点。这表示处于正常状态的事务的一个点。返回保存点ID(sid)。在一个事务中可以创建多个保存点。

2. savepoint_commit(sid,using = None)

发布保存点sid,从创建保存点开始执行的数据库操作将成为可能回滚事务的一部分

3. savepoint_rollback(sid,using = None)

将事务回滚到保存点sid

4. clean_savepoints(using = None)

重置用于生成唯一保存点ID的计数器

值得注意的是:

这些函数中的每一个都接受一个using参数,该参数是数据库的名称。如果using未提供参数,则使用"default"默认数据库。

from django.db import transaction


# open a transaction
@transaction.atomic
def add_author_views(request):
    # 自动提交方式
    # Author.objects.create(name=u‘wangbaoqiang‘,age=33,email=‘wangbaoqiang@qqq.com‘)

    author_name = ulinghuchong
    author = Author(name=author_name,age=26,email=linghuchong@qqq.com)
    author.save()
    # transaction now contains author.save()

    sid = transaction.savepoint()

    try:
        count = Count(name=author_name, article_amount=1)
        count.save()
        # transaction now contains author.save() and count.save()
        transaction.savepoint_commit(sid)
        # open transaction still contains author.save() and count.save()
    except IntegrityError:
        transaction.savepoint_rollback(sid)
        # open transaction now contains only count.save()
        # 保存author操作回滚后,事务只剩下一个操作 

   transaction.clean_savepoints()  #清除保存点

注意:希望当遇到错误得到回滚的事务一定要放在try里面(如果放在try外面,虽然不会报错,但是是不会执行的)。如上面的例子,如果在给Count表执行插入数据发生错误,就会‘断点’回滚到Count表插入数据前,Author表插入的数据不变。

  

参考文章:https://www.cnblogs.com/thomson-fred/p/10198528.html

Django数据库--事务及事务回滚

标签:执行   https   nsa   实现   部分   行操作   功能   数据库数据   django数据库   

原文地址:https://www.cnblogs.com/liuwei-book/p/11948956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!