django_事务回滚
数据库的读写操作中,事务在保证数据的安全性和一致性方面起着关键的作用,而回滚正是这里面的核心操作。Django的ORM在事务方面也提供了不少的API。有事务出错的整体回滚操作,也有基于保存点的部分回滚。
原子性是数据库事务的定义属性。atomic 允许我们创建一个代码块,在该代码块中保证数据库的原子性。如果代码块成功完成,则更改将提交到数据库。如果存在异常,则回滚更改。
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()
在此示例中,即使generate_relationships()通过破坏完整性约束导致数据库错误,您也可以执行查询 add_children(),并且create_parent()仍然存在更改。请注意,尝试的任何操作在调用generate_relationships() 时都已经安全回滚handle_exception(),因此异常处理程序也可以在必要时对数据库进行操作。