django中怎么使用mysql数据库的事务

Posted 168vincent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django中怎么使用mysql数据库的事务相关的知识,希望对你有一定的参考价值。

mysql数据库事务:

在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败

Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交。我们需要在保存数据库操作中自己控制数据库事务的执行流程。

在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法:

  • 装饰器用法  
from django.db import transaction

@transaction.atomic
def viewfunc(request):
    # 这些代码会在一个事务中执行
    ...

 

  • with语句用法 
from django.db import transaction

def viewfunc(request):
    # 这部分代码不在事务中,会被Django自动提交
    ...

    with transaction.atomic():
        # 这部分代码会在事务中执行
        ...

在Django中,还提供了保存点的支持,可以在事务中创建保存点来记录数据的特定状态,数据库出现错误时,可以恢复到数据保存点的状态

from django.db import transaction

# 创建保存点
save_id = transaction.savepoint()  

# 回滚到保存点
transaction.savepoint_rollback(save_id)

补充:

mysql事务:一组mysql语句,放在同一事务中,要么都成功,要么都失败。

 

1)mysql事务基本操作:

 

? begin或start transaction:手动开启一个mysql事务。

 

? commit: 事务提交,让事务中sql语句的执行结果永久有效。

 

? rollback: 事务回滚,撤销事务中sql语句的执行结果。

 

2)mysql事务的保存点:

 

? 在mysql事务中,可以设置事务保存点,在进行事务语句回滚时可以只回滚到某个保存点。

 

? savepoint `保存点名称`: 设置mysql事务保存点。

 

? rollback to `保存点名称`: 回滚事务语句到保存点的位置,保存点之后sql语句的执行结果会被撤销。

 

以上是关于django中怎么使用mysql数据库的事务的主要内容,如果未能解决你的问题,请参考以下文章

django事务中发信号怎么保证post save执行时数据已经写入数据库

Django中MySQL事务的使用

Django提供的mysql事务

Django的事务

带有 MySQL 非事务性更改表的 Django 无法回滚

mysql在django中开启事务,实现悲观锁和乐观锁