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('执行其他操作')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南