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

# 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都放在一个事务中执行(要么所有都成功,要么所有都失败)。
    
    '''
复制代码

 

 

 

2.2

复制代码
#事务
from django.db import transaction
try:
    with transaction.atomic():
        #sql1
        #sql2
        ...
        #在with代码块内书写的所有orm操作都是属于同一个事务
except Exception as e:
    print(e)
peint('执行其他操作')
复制代码

 

posted @   朱饱饱  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示