models

  1. class People(models.Model):
  2. name = models.CharField(max_length=30)
  3. age = models.CharField(max_length=30)
  4. def __str__(self):
  5. return self.name
  6. insert into app03_people (name,age) values('m1','1');

查出最小的age

使用annotate(Min('age')出错

  1. In [1]: from django.db.models import Max,Min,Sum,Avg,Count
  2. In [2]: from app03.models import People
  3. In [3]: People.objects.all()
  4. Out[3]: <QuerySet [<People: m1>, <People: m2>, <People: m3>, <People: m4>]>
  1. In [6]: People.objects.annotate(Min('age'))
  2. Out[6]: <QuerySet [<People: m1>, <People: m2>, <People: m3>, <People: m4>]>
  3. In [10]: print(People.objects.annotate(Min('age')).query)
  4. SELECT `app03_people`.`id`, `app03_people`.`name`, `app03_people`.`age`, MIN(`app03_people`.`age`) AS `age__min` FROM `app03_people` GROUP BY `app03_people`.`id` ORDER BY NULL

小结: People.objects.annotate(Min('age'))默认group by id;

使用aggregate完美解决

  1. In [13]: print(People.objects.aggregate(Min('age'))) # 主这里无法query, 因为他返回的是字典类型.
  2. {'age__min': '1'}

等同的sql,(聚合函数可以单独使用)

  1. mysql> SELECT MIN(`app03_people`.`age`) AS `age__min` FROM `app03_people`;
  2. +----------+
  3. | age__min |
  4. +----------+
  5. | 1 |
  6. +----------+
  7. 1 row in set (0.00 sec)

查询age最大最小

aggregate解决

  1. In [15]: People.objects.aggregate(Min('age'),Max('age'))
  2. Out[15]: {'age__min': '1', 'age__max': '4'}

等价的sql

  1. mysql> SELECT MIN(`app03_people`.`age`) AS `age__min`,MAX(`app03_people`.`age`) AS `age__max` FROM `app03_people`;
  2. +----------+----------+
  3. | age__min | age__max |
  4. +----------+----------+
  5. | 1 | 4 |
  6. +----------+----------+
  7. 1 row in set (0.00 sec)

annotate分组查询

  1. In [6]: People.objects.values('part').annotate(Min('age'))
  2. Out[6]: <QuerySet [{'part': 'UI', 'age__min': '10'}, {'part': 'python', 'age__min': '30'}, {'part': 'java', 'age__min': '40'}]>
  3. In [7]: print(People.objects.values('part').annotate(Min('age')).query)
  4. SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL

默认值显示两个字段(正常)

  1. mysql> SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL
  2. -> ;
  3. +--------+----------+
  4. | part | age__min |
  5. +--------+----------+
  6. | UI | 10 |
  7. | python | 30 |
  8. | java | 40 |
  9. +--------+----------+
  10. 3 rows in set (0.00 sec)
  1. In [17]: print(People.objects.values('part').annotate(Min('age'),Max('age')).query);
  2. SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min`, MAX(`app03_people`.`age`) AS `age__max` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL
  1. mysql> SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min`, MAX(`app03_people`.`age`) AS `age__max` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL;
  2. +--------+----------+----------+
  3. | part | age__min | age__max |
  4. +--------+----------+----------+
  5. | UI | 10 | 20 |
  6. | python | 30 | 50 |
  7. | java | 40 | 40 |
  8. +--------+----------+----------+
  9. 3 rows in set (0.00 sec)
  1. In [19]: print(People.objects.values('part').annotate(Min('age')).annotate(Max('age')).query);
  2. SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min`, MAX(`app03_people`.`age`) AS `age__max` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL
  1. mysql> SELECT `app03_people`.`part`, MIN(`app03_people`.`age`) AS `age__min`, MAX(`app03_people`.`age`) AS `age__max` FROM `app03_people` GROUP BY `app03_people`.`part` ORDER BY NULL;
  2. +--------+----------+----------+
  3. | part | age__min | age__max |
  4. +--------+----------+----------+
  5. | UI | 10 | 20 |
  6. | python | 30 | 50 |
  7. | java | 40 | 40 |
  8. +--------+----------+----------+
  9. 3 rows in set (0.00 sec)

以2个字段为准 分类

model

  1. In [157]: print ChainLog.objects.values('src_svc_id', 'dst_svc_id').annotate(
  2. ...: is_success_total_count=Count('is_success')).query
  3. SELECT `home_application_chainlog`.`src_svc_id`, `home_application_chainlog`.`dst_svc_id`, COUNT(`home_application_chainlog`.`is_success`) AS `is_success_total_count` FROM `home_application_chainlog` GROUP BY `home_application_chainlog`.`src_svc_id`, `home_application_chainlog`.`dst_svc_id` ORDER BY NULL
  1. mysql> SELECT `home_application_chainlog`.`src_svc_id`, `home_application_chainlog`.`dst_svc_id`, COUNT(`home_application_chainlog`.`is_success`) AS `is_success_total_count` FROM `home_application_chainlog` GROUP BY `home_application_chainlog`.`src_svc_id`, `home_application_chainlog`.`dst_svc_id` ORDER BY NULL;
  2. +------------+------------+------------------------+
  3. | src_svc_id | dst_svc_id | is_success_total_count |
  4. +------------+------------+------------------------+
  5. | 1 | 1 | 2 |
  6. | 1 | 2 | 1 |
  7. | 2 | 3 | 1 |
  8. | 2 | 4 | 1 |
  9. | 3 | 5 | 1 |
  10. +------------+------------+------------------------+
  11. 5 rows in set (0.00 sec)

如果是py字典,以2个字段为维度,不好统计

  1. total = [
  2. {'from':1,'to':2,'is_success':1},
  3. {'from':1,'to':3,'is_success':0},
  4. {'from':1,'to':4,'is_success':1}
  5. ]
  6. faild = [
  7. {'from':1,'to':2,'is_success':1},
  8. {'from':1,'to':3,'is_success':0},
  9. {'from':1,'to':4,'is_success':1}
  10. ]

[django]django models最佳实战的更多相关文章

  1. [django]django查询最佳实战

    from django.db.models import Max, Min, Sum, Avg, Count, Q, F Django中的F和Q函数 一.F介绍 作用:操作数据表中的某列值,F()允许 ...

  2. Django 二——models(admin、ORM),一对一、一对多、多对多操作,all、values、value_list的对比

    内容概要 1.关系对象映射ORM 2.admin的配置(选修) 3.all().values().value_list()的对比 4.数据库操作(一对一.一对多.多对多) 5.HttpResponse ...

  3. web框架-(七)Django补充---models进阶操作及modelform操作

    通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...

  4. 【Django】--Models 和ORM以及admin配置

    Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...

  5. Django 之 models的 F() 和 Q() 函数

    前提: app名称为core,models.py 如下: #coding: utf8 import datetime from django.db import models class Order( ...

  6. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

  7. django - from django.db.models import F - class F

    F() 的执行不经过 python解释器,不经过本机内存,是生成 SQL语句的执行. # Tintin filed a news story! reporter = Reporters.objects ...

  8. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  9. Django的Models(三)

    ORM操作的一些进阶的方法: ################################################################## # PUBLIC METHODS T ...

随机推荐

  1. (转)mysql百万级以上查询优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  2. 什么是IOC为什么要使用IOC

    概念: 作用: 结论:借助于“第三方”实现具有依赖关系的对象之间的解耦 在使用IOC之前的情况 如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运 使用IOC之后 对象A获得依赖对象B的过程,由 ...

  3. Xshell登录Ubuntu12.04

    Ubuntu安装ssh服务: sudo apt-get install openssh-server 打开Xshell,选择“新建”,“连接”设置里选择SSH,主机填入需要连接的主机的IP地址.在“用 ...

  4. 网络通信协议六之IP地址和MAC地址特征分析

    逻辑地址和物理地址 >>逻辑地址:工作在网络层,也叫IP地址,①具有全局唯一性②用软件实现③32位 10.1.0.6 -——>00001010.00000001.00000000.0 ...

  5. Android所有Demo资源汇总,太全了(申明:来源于网络)

    Android所有Demo资源汇总,太全了(申明:来源于网络) 地址:http://bbs.csdn.net/topics/391928947

  6. .NET Core开发日志——RequestDelegate

    本文主要是对.NET Core开发日志--Middleware的补遗,但是会从看起来平平无奇的RequestDelegate开始叙述,所以以其作为标题,也是合情合理. RequestDelegate是 ...

  7. POJ 1451 - T9 - [字典树]

    题目链接:http://bailian.openjudge.cn/practice/1451/ 总时间限制: 1000ms 内存限制: 65536kB 描述 Background A while ag ...

  8. hive优化之开启压缩功能

    1.开启hive作业mapreduce任务中间压缩功能: 对于数据进行压缩可以减少job中map和reduce task间的数据传输量.对于中间数据压缩,选择一个低cpu开销编/解码器要不选择一个压缩 ...

  9. 应用打开其xlspptdoc等

    http://www.libxl.com/documentation.html  xls读写编辑类库libxl https://blog.csdn.net/songbob/article/detail ...

  10. babel-preset-env使用介绍

    声明:文章转自https://www.cnblogs.com/ye-hcj/p/7070084.html 本文介绍一个babel转码神器babel-preset-env 简介 现如今不同的浏览器和平台 ...