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
  • 相关阅读:
    二叉树的深度(剑指offer)
    平衡二叉树(剑指offer)
    平衡二叉树
    513. Find Bottom Left Tree Value(得到左下角的节点)(树的层次遍历)
    637. Average of Levels in Binary Tree(一棵树每层节点的平均数)(二叉树的层序遍历)
    145. Binary Tree Postorder Traversal(非递归实现二叉树的后序遍历)
    正则表达式式总结
    re模块
    生成器 生成器函数 列表推倒式 生成器表达式
    闭包,迭代器
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13297730.html
Copyright © 2011-2022 走看看