开发者

Django事务transaction的使用以及多个装饰器问题

开发者 https://www.devze.com 2023-11-09 10:31 出处:网络 作者: Lei
目录Djangophp事务transaction使用及多个装饰器django事务类库:django.db.transactionatomic提供两种方案实现事务Django事务transaction.atomic自定义事务处理总结Django事务transaction使用及多个装饰器
目录
  • Djangophp事务transaction使用及多个装饰器
    • django事务类库:django.db.transaction
    • atomic提供两种方案实现事务
  • Django事务transaction.atomic
    • 自定义事务处理
  • 总结

    Django事务transaction使用及多个装饰器

    django编程事务类库:django.db.transaction

    atomic提供装饰器用法当有多个装饰器时@transaction.atomic必须紧贴函数,如果其他装饰器紧贴函数虽不会报错但函数执行会出现问题

    例:

    #正确用法
    from django.db import transaction
    @classmethod
    @transaction.atomic
    def func(request):
     ......
    #错误用法
    from django.db import transaction
    @transaction.atomic
    @classmethod
    def func(request):
     ......

    atomic提供两种方案实现事务

    1、装饰器用法:

    from django.db import transaction
    @transaction.atomic
    def func(request):
      # 这些代码会在一个事务中执行
      ......

    装饰器用法:

    • 整个视图中所有 mysql 数据库的操作都看做一个事务,范围太大,不够灵http://www.devze.com活。
    • 而且无法直接作用于类视图

    2、with 语句用法:

    from django.db import transactionpython
    def func(request):
      # 这部分代码不在事务中,会被 Django 自动提交
      ......
      with transaction.atomic():
          # 这部分代码会在事务中执行
          ......

    with 语句用法:

    • 可以灵活的有选择性的把某些 MySQL 数据库的操作看做一个javascript事务。
    • 而且不用关心视图的类型。

    Django事务transaction.atomic

    自定义事务处理

    方法一:全局配置对一整个http请求内数据库操作进行事务管理

    方法二:atomic 装饰器对整个view进行事务管理

    方法三:atomic 对代码块进行事务管理

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号