当前位置:Gxlcms > 数据库问题 > Django数据库补充之事务

Django数据库补充之事务

时间:2021-07-01 10:21:17 帮助过:22人阅读

django.db import models class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField(max_length=64) class Dept(models.Model): title = models.CharField(max_length=32)?
  • 定义路由:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r‘^test/$‘, views.test),
    ]
  • 定义test视图函数:

    from django.shortcuts import render, HttpResponse
    from . import models
    
    
    def test(request):
        try:
            from django.db import transaction  # 导入事务
            with transaction.atomic():
                user_obj = models.UserInfo.objects.create(username=‘Lena‘, email=‘example@live.com‘)
                dept_obj = models.Dept.objects.create(title=‘IT‘)
        except Exception as e:
            return HttpResponse(‘error happened, db rollback‘)
    
        return HttpResponse(‘OK‘)
  • 说明:

    1. 以上将创建user_objdept_obj记录的行为组合成一个不可分割的原子性操作,原子内执行的数据库操作发生任何异常,都会执行回滚操作。
    2. 事物检查异常回滚,但是不容错,错误还是会抛出,因此这里用了异常捕捉。
    3. 正常情况下访问http://127.0.0.1:8000/test/,将会得到OK响应,如果我们手动将dept_obj = models.Dept.objects.create(title=‘IT‘)title=‘IT‘改为name=‘IT‘,手动造成异常,那么会触发事物回滚,写入的user_obj也会撤销。这一点可以查看数据库验证。

  • 注意一点:事务需要数据库引擎支持,比如Innodb引擎就是支持的。

    Django数据库补充之事务

    标签:nod   数据库   art   数据库迁移   param   with   项目   UNC   user   

    人气教程排行