首页 > 其他分享 >django查询-列延迟加载only()、defer()

django查询-列延迟加载only()、defer()

时间:2023-07-18 09:24:01浏览次数:42  
标签:defer connection bookinfo only django id 加载

这玩意和sqlalchemy的几乎一样。

only():只加载给定的列,其他列只有在使用时会发起二次查询

defer():不加载指定的列,刚好和only()相反。

实例:

>>> ret = BookInfo.objects.get(id=1).only("name")
#1、先导入connection, 获取django查询的所有sql语句
>>> from django.db import connection

# 可以明显的看到,django只查询了name列的数据。
>>> connection.queries[-1]                    
{'sql': 'SELECT `bookinfo`.`id`, `bookinfo`.`name` FROM `bookinfo` LIMIT 21', 'time': '0.000'}
>>>

# 当我们使用其他列时,django会再次使用对象的主键来获取对应的值
>>> ret.is_delete 
False
>>> connection.queries[-1]
{'sql': 'SELECT `bookinfo`.`id`, `bookinfo`.`is_delete` FROM `bookinfo` WHERE `bookinfo`.`id` = 1 LIMIT 21', 'time': '0.000'}
>>>

特别注意,调用模型了的save()方法,只会保存加载过的列

>>> ret.readcount=888
>>> ret.save()
**# 可以看到,压根就没有更新readcount的值!!!!**
>>> connection.queries[-1] 
{'sql': "UPDATE `bookinfo` SET `name` = '射雕英雄传' WHERE `bookinfo`.`id` = 1", 'time': '0.016'}

标签:defer,connection,bookinfo,only,django,id,加载
From: https://www.cnblogs.com/juelian/p/17561869.html

相关文章

  • django
    目录1、总体结构2、交互关系3、Model(1)Field的定义(2)Model中可以定义Method,实现下列功能:(3)数据库表查询1)基本查询2)使用过滤器查询3)字段(Field)查询4、View(1)URL分发处理(2)View函数5、Template(1)变量(2)TAG(3)过滤器功能(4)Template继承1、总体结构Django是MTV结构,即:Model,Template,ViewMo......
  • Django+DRF+Vue 网页开发环境安装(windows/Linux)
    博客地址:https://www.cnblogs.com/zylyehuo/总览一、安装Djangopipinstalldjango==3.2二、安装MySQL驱动程序pipinstallpymysql三、安装DRFpipinstalldjangorestframework-ihttps://pypi.douban.com/simple四、安装Vue(一)脚本化引入<scriptsrc=......
  • 【12.0】Django框架之form组件
    【一】需求写一个注册功能获取用户名和密码,利用form表单提交数据在后端判断用户名和密码是否符合一定的条件用户名中不能包含啦啦啦密码不能少于三位如果符合条件需要你将提示信息展示到前端页面【二】form表单实现【1.0】点击提交按钮返回比对信息前端页面<f......
  • 【14.0】Django框架之CBV添加装饰器的三种方式
    【一】给类方法加装饰器指名道姓的装--放在方法上面路由path('login_view/',views.MyLogin.as_view()),需要导入一个模块fromdjango.utils.decoratorsimportmethod_decorator视图fromdjango.viewsimportViewfromdjango.utils.decoratorsimportmetho......
  • 【13.0】Django框架之Cookie和Session
    【一】Cookie与Session的发展史详解Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史:1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只......
  • django项目中分多个models.py创建table
    django项目每个app都默认有一个model.py文件。当app需要大量建立table,且需要分类时,能否建立多个model.py文件?。1、在app文件夹下创建一个models文件夹(myapp/models/):2、将app文件夹中models.py文件删除(也可以剪切到models文件夹中):3、models文件夹下新建__init__.py:4、......
  • 【6.0】Django框架之路由层
    【一】路由匹配#路由匹配path('test',views.test),path('testadd',views.testadd),无法跳转到testaddurl方法第一个参数是正则表达式只要第一个参数正则表达式能够匹配到内容,就会立刻停止匹配,执行视图函数#路由匹配path('test/',views.test),path('testadd......
  • 【9.0】Django框架之模型层
    【一】前言Django自带的sqlite3数据对日期格式不敏感,处理的时候容易出错【1】测试脚本测试脚本当我们只想要测试Django中的某一个py文件的内容时,我们可以不需要书写前后端交互的形式,而是直接写一个测试脚本即可测试环境的准备在测试文件中书写下面内容这内容其......
  • 【8.0】Django框架之模板层
    【一】模板语法的传值{{}}:变量相关{%%}:逻辑相关【1】数据准备路由#模板语法传值url(r'^index/',views.index),【2】基本数据类型(1)视图defindex(request):#模板语法可以传递的后端Python数据类型#整型a=123#浮点型b=11.11......
  • 【补充】Django自带的序列化组件
    【11.0补充】Django自带的序列化组件【一】准备数据fromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):username=models.CharField(max_length=32,verbose_name="姓名")age=models.IntegerField(verbose_name="年龄")g......