Django之事务
Django之事务
事务就是将一组操作捆绑在一起,只有当这一组操作全部都成功以后这个事务才算成功;当这组操作中有任何一个没有操作成功,则这个操作就会回滚,回到操作之前的状态.
其中牵扯到向数据库中写数据的操作时,看起来未成功的操作实际上已经写进数据库了,在发生异常以后,回滚过程中,将这些数据进行删除,恢复到操作之前,当你再次往数据库中写数据时,id将会被占用,也就是说id会出现断了的情况,就是之前写入删除导致的.
先搭建一个py文件运行的环境:
1 import os 2 3 if __name__ == '__main__': 4 os.envuron.setdefault('DJANGO_SETTINGS_MODULE', 'BMS.settings') 5 6 import django 7 8 django.setup() 9 10 11 import datetime 12 from app01 import models 13 14 try: 15 16 from django.db import transaction 17 18 with transaction.atomic(): 19 new_publisher = models.Publisher.objects.create(name='刺激战场') 20 models.Book.objects.create(title='机场钢枪', 21 publish_date = datetime.date.today(),
22 publisher_id=10) # 指定一个不存在的出版社ID 23 24 except Exception as e: 25 print(str(e))
因为出版社不存在,当程序执行到 publisher_id=10 时,发生错误,程序回滚,回到程序开始执行之前的状态.然后打印异常.