model:

先给一个简单的表结构

from django.db import models

class User(models.Model):
username=models.CharField(max_length=32)
pwd=models.CharField(max_length=64)
pd=models.ForeignKey('Depart',on_delete=models.CASCADE) class Depart(models.Model):
title=models.CharField(max_length=32)

only

需求:在user表中获取所有的username和id

a.需求: 只取n列
queryset=[{},{}] model.User.objects.all().values('id','username') queryset=[(),()]
model.User.objects.all().values_list('id','username') queryset=[obj,obj] obj只有id和name
result=model.User.objects.all().only('id','username') for item in result:
print(item.id,item.username,item.pwd)
age没有,去数据库再查一次...for循环几次就再查几次性能很低

需要注意的是:

  • 如果取了only以外的字段,虽然可以取的到,但是他内部会重新查一次表
  • 如果循环取only以外的字段就会重复多次查表操作

defer

defer跟only想对应,是排除哪些字段

result=model.User.objects.all().defer('id','username')排除哪列

select_related

###连表操作,相当于主动做join

需求:获取所有人的用户和所在部门

用户表和部门表示多对一的关系

result=model.User.objects.all()
for obj in result:
print(obj.username,obj.dp.title)

上述的ORM语句性能非常差

因为for循环一次都需要跨一次表

跨表查询的性能极低!!!!!!!!!!

优化:

result=model.User.objects.all().select_related('dp')
for item in result:
print(item.name,item.dp(Fk).title)

相当于一开始就连表了,再取的时候不需要再重新跨表操作

sql:

select * from user left join depart on user.dp.id=depart.id

需要说明的是:

  selected_related只支持FK,和OnetoOne

   如果连表多性能也越来越差.

prefetch_related

###

多次单表操作,先查询想要的数据,
然后构建条件,如:id=[1,2,3],再查询其他表的时候,根据id做条件

###

result=User.object.all().prefetch_related('dp')
for item in result:
print(item.name,item.dp.title)

sql

#select * from user
# 通过python代码获取:所有dp_id=[1,2]
# select * from depart where id in dp_id

说明:

  • 支持M2M FK One
  • 2次单表查询

ORM性能相关的更多相关文章

  1. Django之缓存+序列化+信号+ORM性能优化+验证码

    缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加 明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcach ...

  2. Django ORM性能优化 和 图片验证码

    一,ORM性能相关 1. 关联外键, 只拿一次数据 all_users = models.User.objects.all().values('name', 'age', 'role__name') ...

  3. Django之缓存、信号和图片验证码、ORM性能

    一. 缓存 1. 介绍 缓存通俗来说:就是把数据先保存在某个地方,下次再读取的时候不用再去原位置读取,让访问速度更快. 缓存机制图解 2.Django中提供了6种缓存方式 1. 开发调试 2. 内存 ...

  4. python---django中orm的使用(5)数据库的基本操作(性能相关:select_related,和prefetch_related重点)(以及事务操作)

    ################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...

  5. Django的ORM那些相关操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 & ...

  6. Django之ORM那些相关操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 ...

  7. Django ORM那些相关操作zi

    Django ORM那些相关操作   一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs) ...

  8. IIS性能相关的配置、命令

    IIS性能相关的配置.命令 应用程序池回收 不要使用缺省的“固定时间间隔(分钟)”:1740(即29小时),建议改为0 可以根据实际情况设置特定时间回收,比如凌晨4点 最大工作进程数 可以根据实际情况 ...

  9. 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记

    [本文篇幅较长,可以通过目录查看您感兴趣的内容,或者下载格式良好的PDF版本文件查看] 目录 一.ORM的"三国志"    2 1,PDF.NET诞生历程    2 2,Linq2 ...

随机推荐

  1. 2017.7.1 nginx反向代理服务器域名解析配置(已验证可使用)

    下载地址:http://learning.happymmall.com/ 前提:ftpserver已经开启,并且设置为: 1.获得安装文件 2.修改配置文件 2.1 修改conf/nginx.conf ...

  2. JavaSE入门学习18:Java面向对象之多态

    一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...

  3. perl学习笔记二

    数组: 特殊的数组索引:加入对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大,只要有可用的内存分配给数组.意外增加的数组元素的值为undef. $a[0]="aa"; ...

  4. axis2 利用小工具cat.aar

    Axis2: Web Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构). 昨天把把菜刀脚本打包发现<>在xml会被转义,导致菜刀 ...

  5. python——SyntaxError:invalid syntax

    格式不对,tab 或空格的格式不统一导致

  6. (三)storm-kafka源代码走读之怎样构建一个KafkaSpout

    上一节介绍了config的相关信息,这一节说下,这些參数各自是什么.在zookeeper中的存放路径是如何的,之前QQ群里有非常多不知道该怎么传入正确的參数来new 一个kafkaSpout,其主要还 ...

  7. iOS tableView Section圆角方案

    给tableView的section设置圆角 首先给让cell左右偏移一点的距离,通过重写cell的setframe方法来实现 -(void)setFrame:(CGRect)frame{ CGFlo ...

  8. 天兔插件监控mysql

    Lepus3.8-天兔mysql数据库监控系统搭建 原创ixhao2016-08-24 02:36:23评论(11)3183人阅读 Lepus3.8-天兔mysql数据库监控系统搭建 lepus是一款 ...

  9. args *args **kwargs区别

    python 函数中的参数类型有两种,分别为 位置参数和关键字参数: 一 .位置参数(该类参数位置固定不变) args:     表示默认位置参数,该参数是具象的,有多少个参数就传递多少参数,且参数位 ...

  10. 转载 jenkins执行selenium 测试 浏览器不显示解决方法

    原文地址: http://blog.csdn.net/achang21/article/details/45096003 The web browser doesn't show while run ...