zoukankan      html  css  js  c++  java
  • django 数据库 mysql 事务 处理

    显式控制事务

    Django 提供了一个 API 控制数据库事务。

    atomic(using=Nonesavepoint=True)

    原子性是数据库事务的定义属性。 atomic 允许创建代码块来保证数据库的原子性。如果代码块成功创建,这个变动会提交到数据库。如果有异常,变动会回滚。

    atomic 块可以嵌套。在这个例子里,当内部块成功完成时,如果在稍后外部块里引发了异常,则仍可回滚到最初效果。

    atomic 既可用作 decorator:: :

    from django.db import transaction
    
    @transaction.atomic
    def viewfunc(request):
        # This code executes inside a transaction.
        do_stuff()

    也可用作 context manager:: :

    from django.db import transaction
    
    def viewfunc(request):
        # This code executes in autocommit mode (Django's default).
        do_stuff()
    
        with transaction.atomic():
            # This code executes inside a transaction.
            do_more_stuff()

    在 try/except 块中使用装饰器 atomic 来允许自然处理完整性错误:

    from django.db import IntegrityError, transaction
    
    @transaction.atomic
    def viewfunc(request):
        create_parent()
    
        try:
            with transaction.atomic():
                generate_relationships()
        except IntegrityError:
            handle_exception()
    
        add_children()

    事务回滚

    第一个选项是回滚整个事务。比如:

    a.save() # Succeeds, but may be undone by transaction rollback
    try:
        b.save() # Could throw exception
    except IntegrityError:
        transaction.rollback()
    c.save() # Succeeds, but a.save() may have been undone

    调用 transaction.rollback() 回滚整个事务。任何未提交的数据库操作会被丢弃。在这个例子里, a.save() 做的改变会丢失,即使操作本身没有引发错误。

    保存点回滚

    你可以使用 savepoints 来控制回滚的程度。执行可能失败的数据库操作之前,你可以设置或更新保存点;这样,如果操作失败,你可以回滚单一的错误操作,而不是回滚整个事务。比如:

    a.save() # Succeeds, and never undone by savepoint rollback
    sid = transaction.savepoint()
    try:
        b.save() # Could throw exception
        transaction.savepoint_commit(sid)
    except IntegrityError:
        transaction.savepoint_rollback(sid)
    c.save() # Succeeds, and a.save() is never undone

    在这个例子里, a.save() 将不会在 b.save() 引发异常的情况下被撤销。

    声明 : 转载自 Django 官方中文库文档。

    链接 : https://docs.djangoproject.com/zh-hans/3.0/topics/db/transactions/#django.db.transaction.rollback

    邮箱: 1090055252@qq.com
  • 相关阅读:
    python2文件转换为exe可执行文件
    pycharm下 os.system os.popen执行命令返回有中文乱码
    python 虚拟环境
    git commit之后,想撤销commit
    Android Dialog使用举例
    Builder模式在Java中的应用(转)
    AngularJS promise()
    给你一个承诺
    AngularJs 用户登录验证模块(demo)参考总结
    推荐 15 个 Angular.js 应用扩展指令(参考应用)
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13297730.html
Copyright © 2011-2022 走看看