defer和only 事务(请求,装饰器,局部)

发布时间 2023-11-30 18:44:40作者: 朱饱饱

# defer和only(查询优化相关)
# only保持是book对象,但是只能使用only指定的字段

# books = models.Book.objects.all().only('name')
    # print(books[0].name)
    # print(books[0].price)  # 能出来,

    # books = models.Book.objects.all().only('name')
    #
    # print(books[0].__dict__)
    books = models.Book.objects.all().defer('name','price')
    print(books[0].__dict__)

 

 

# 事物:ACID,事物的隔离级别(搜),锁, 行级锁,表级锁

# djanog orm中使用事物:原子性操作,要么都成功,要么都失败

# 新增一个作者详情,新增一个作者

# 事物的三个粒度
# 1 局部使用

from django.db import transaction
    with transaction.atomic(): # 都在事物中,要么都成功,要么都失败
        author_detail=models.AuthorDetail.objects.create(addr='xxx',phone='123',sex=1)
        # raise Exception('抛了异常')
        author=models.Author.objects.create(name='llqz',age=19,author_detail=author_detail)

 

 

# 2 视图函数装饰器,这一个视图函数都在一个事物中

 # @transaction.atomic
    # def index(request):
    #     return HttpResponse('ok')


    # 3 整个http请求,在事物中,在setting.py中配置
    '''
    DATABASES = {
        'default': {
            ...
            'PORT': 3306,
            'ATOMIC_REQUEST': True,
       
        }
    }

    'ATOMIC_REQUEST': True,
设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
    
    '''