ORM优化查询、choices参数
ORM查询优化
only与defer
res = models.Book.objects.all()
这样是不会有任何返回结果,因为ORM是惰性查询,减少不必要的数据库操作,降低数据库的压力。
也就是说能少走一次数据库就少走一次,最好是一次数据库都不要走或者说之走一次。
only优化:
res = models.Book.objects.only('title') # 括号内查询的字段可以有多个
print(res) # 查询一次,打印一条sql查询语句
for i in res:
print(i.title) # 查询一次,打印一条sql查询语句
print(i.price) # 有几个对象,就查询几次,打印几条sql查询语句
only会把括号内字段对应的值,封装到查询返回的对象中,通过对象点括号字段,不需要再走数据库查询,直接返回结果,一旦你点了不是括号内的字段 就会频繁的去走数据库查询


defer优化
res = models.Book.objects.defer('title')
# print(res)
for i in res:
# print(i.title)
print(i.title)
和 only相反,defer会将括号内的字段排除之外将其他字段对应的值, 直接封装到返回给你的对象中, 点其他字段 不需要再走数据库查询,一旦你点了括号内的字段就会有多少值,就会查询几次


select_related和prefetch_related
select_related优化
res = models.Book.objects.select_related('publish')
# print(res)
for i in res:
print(i.publish)
select_related括号内放外键字段,并且外键字段的类型只能是一对一和一对多,不能是多对多,
内部自动做联表操作,会将括号内外键字段所关联的表与当前表自动拼接成一张表,然后将表中的数据一个个查询出来封装成一个个的对象。 这样做 就不会重复的走数据库,减轻数据库的压力。
select_related括号内可以放多个外键字段,用逗号给开,会将多个外键字段关联的表拼接成一张大表

prefetch_related优化
res = models.Book.objects.prefetch_related('publish','authors')
for i in res:
print(i.publish)
- prefetch_related内部是子查询,会自动按照步骤查询多张表,然后将查询的结果封装到对象中,这样给用户的感觉还是联表操作。
- 括号内支持传多个外键字段,并且没有类型限制。
- 每放一个外键字段,就会多走一条sql语句,多查询一张表

MTV与MVC模型
django号称是MTV模型,其实本质上还是MVC模型
MTV:models templates views
MVC:models views controller(路由匹配)
choices参数
choices = (
(1,'male'),
(2,'female'),
(3,'others')
)
gender = models.IntegerField(choices=choices)
from app01 import models
user_obj = models.Userinfo.objects.filter(pk=4).first()
print(user_obj.username)
print(user_obj.gender)
# 针对choices字段 如果你想要获取数字所对应的中文 你不能直接点字段
# 固定句式 数据对象.get_字段名_display() 当没有对应关系的时候 该句式获取到的还是数字
print(user_obj.get_gender_display())
ORM优化查询、choices参数的更多相关文章
- Django之ORM优化查询的方式
ORM优化查询的方式 一.假设有三张表 Room id 1 2 .. 1000 User: id 1 .. 10000 Booking: user_id room_id time_id date 1 ...
- 06 ORM常用字段 关系字段 数据库优化查询
一.Django ORM 常用字段和参数 1.常用字段 models中所有的字段类型其实本质就那几种,整形varchar什么的,都没有实际的约束作用,虽然在models中没有任何限制作用,但是还是要分 ...
- F与Q查询 事务 choices参数
F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...
- ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式
choices参数(重要) **使用方式
- Django之ORM字段和字段参数
ORM介绍 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 Django中的ORM Django项目使用MySQL数据库 Model 快速入门 字段 自定义字段 字段参数 Model ...
- Django的ORM常用查询操作总结(Django编程-3)
Django的ORM常用查询操作总结(Django编程-3) 示例:一个Student model: class Student(models.Model): name=models.CharFiel ...
- django orm 优化
.markdown-body hr::after,.markdown-body::after{clear:both}.loopLine,.messageLine0{marker-end:"u ...
- Django 之 ORM 字段和字段参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- ORM优化
orm优化数据库访问:https://docs.djangoproject.com/en/1.11/topics/db/optimization/ 一.QuerySet 可迭代 querysey=mo ...
随机推荐
- 【红宝书】第20章.JSON
JSON是一种轻量级的数据格式.JSON使用JS语法的子集表示对象.数组.字符串.数值.布尔值和null,不支持undefined JSON.stringify() // JSON.stringi ...
- android上如何写配置文件
android上如何写配置文件:使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态 ...
- 使用ul和li进行图片的布局
使用ul和li进行浮动布局(自适应) 1 图片上下两排: 首先盒子的宽度要给100% ul包裹一个div,首先量好盒子的宽和高,并进行设置, margin 0 auto 盒子居中显示 每个li向左浮动 ...
- Redis 到底是怎么实现“附近的人”这个功能的呢?
作者简介 万汨,饿了么资深开发工程师.iOS,Go,Java均有涉猎.目前主攻大数据开发.喜欢骑行.爬山. 前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG.MySQL和MongoD ...
- jsp + js + 前端弹出框
在项目中,前端页面我们时常需要各种各样的弹出框: 1.alert对话框:显示含有给定消息的"JavaScript Alert"对话框 代码: var a = "Hello ...
- stdc++.6.0.9动态库缺失
问题 ld: library not found for -lstdc++.6.0.9 clang: error: linker command failed with exit code 1 (us ...
- JDK8,Optional
作为程序员,你肯定遇到过NullPointerException, 这个异常对于初出茅庐的新人, 还是久经江湖的老手都是不可避免的痛, 可又是那么的无能为力,为了解决它,你只能在使用某个值之前,对其 ...
- Mybatis XML映射文件
mybatis为聚焦于SQL而构建,SQL映射文件常用的顶级元素如 resultMap,是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. insert,映射插入语句 update, ...
- Chrome 开发者工具实用操作
Chrome 开发者工具实用操作 https://umaar.com/dev-tips/
- http服务需要pycurl模块这样去监控服务
最近运维还是比较空闲,写篇自己的心得体会.做过运维的应该都做过http服务了.像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去 ...