有些时候我们需要对数据库进行一连串的操作,如果其中某一个操作失败,那么其他的操作也要跟着回滚到操作以前的状态。
举个例子。某天你到银行存了 100 块钱,所以你的账户的数据库表就应该减去 100 块,而银行的账户上增加 100 块。但如果数据库在执行银行账户增加 100 块时操作失败了,岂不是平白无故损失掉 100 块钱,那你不得把银行屋顶给拆了。
这种情况下就需要用到事务这个概念了,即把一组操作捆绑到一起,大家生死与共,要么都成功,要么都失败,结成人民统一战线。
Django 里如何实现事务?看下面的例子:
# models.py
from django.db import models
class Student(models.Model):
"""学生"""
name = models.CharField(max_length=20)
class Info(models.Model):
"""学生的基本情况"""
age = models.IntegerField()
class Address(models.Model):
"""学生的家庭住址"""
home = models.CharField(max_length=100)
有三个模型,Student 为学生、Info 为学生的基本情况、Address 为学生的住址。假设这三个模型必须同时创建,否则数据就是不完整的。
我们可以这样写视图: