1.聚合(aggregate)

聚合的主要语法:

  from django.db.models import Avg , Max , Min , Count

  models.类名 .objects.all().aggregate(聚合函数(字段名))

  也可以给聚合函数手动加一个名字 : aggregate(c=count(字段名))

  上面这句话的意思是,从类名这个对象中得到你想要聚合(avg,max,min,count)的字段

  目前常用的聚合函数有: avg(平均值) , max(最大值) , min(最小值) ,count(计数,有多少个个数)

如果你需要不止一个聚合,可以向aggregate()字句中添加另一个参数,比如:

  book.objects.aggregate( Avg(price) , Min(price), Max(price) )

2.分组(annotate)

sql语句 : select * from 表名 group by 以什么进行分组 ;

在orm中,

  models.book.objects.values('依据什么字段进行分组').annotate(聚合函数)

  例子: 从emp表中找到最高的工资

  models.emp.objects.values(dep).annotate(c=Max(salary)) #注意 annotate里面必须写个聚合函数,不然没有意义,并且必须有个别名,别名随便写,但是必须有,用哪个字段分组,values里面就写哪个字段,annotate其实就是对分组结果的统计,统计你需要什么

单表查询:

  查询每一个部门(dep)的名称以及对应员工(emp)的平均薪水

  models.emp.objects.values('dep_id__name').annotate(av=Avg('salary'))

  查询每个部门的Id以及对应的员工的最大的年龄

  models.emp.objects.values(dep_id).annotate(max=Max(age))

连表:

  models.emp.objects.values(dep__name).annotate(a=Count(id),b=Max(age))

3.F查询: (某数大于,小于某数的查询方式) 如果要查询小于等于可以用 ''~'' 符 ,表示非,小于

  语法:

    查询a数大于b数的内容

    models.book.objects.filter(a__gt=F(b))

    查询a数小于b数两倍的内容

    models.book.objects.filter(a__lt=F(b)*2)

  修改操作也可以使用F函数,比如将每一本书的价格提高10元:

  new_price=models.book.objects.update(price=F(price)+10)

4.Q查询:(常与 ''|'' 连用)

  语法:

  查询姓张的作者或者年龄为28岁的人

  models.author.objects.filter(Q(name='张')|Q(age=28))

  语法:

  查询姓张的作者并且年龄为28岁的人

  models.author.objects.filter(Q(name="张"),Q(age=28))

5.orm原生sql语句

Django提供两种方法使用原始SQL进行查询,

  一种是raw()方法,进行原始SQL查询并返回模型实例,另一种是完全避开模型层,直接执行自定义的SQL语句.

  另一种是extra方法,

6. Python脚本中使用Django环境

import os

if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings")
import django
django.setup() from app01 import models #引入也要写在上面三句之后 books = models.Book.objects.all()
print(books)

7.自定义标签和过滤器

自定义过滤器:

1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag

2.在app中创建tempatetags模块(模块名只能是templatetags)

3.创建任意.py文件,如: my_tags.py

from django import template
from django.urls.safestring import mark_safe register=template.Library() #register的名字是固定的,不可改变

 步骤1: 创建一个文件夹,名必须为tempatetags

步骤2: tempatetags中创建.py文件, 导入

from django import template

 from django.urls.safestring import mark_safe

步骤3: 在settings中注册

步骤4:写你自己要写的过滤器,比如: 你要将所有的'o'替换成'x'

@register.filter #固定死的
def myreplace(a,b): #最多接收连个参数,而且这个过滤器可以放到if判断和for循环等语句里面
来使用
return a.replace(o,b)

步骤5:在HTML文件中写

在开头引入你创建的py文件

{% load 创建的py文件 %}

然后在你想要过滤的地方写你自定义的过滤器

{{ name|myreplace:'内容' }}   此时就把你的name内容中的'o'全部替换成了'x'

自定义标签:(不能用在if ,for循环里面)

前三步的步骤是相同的

步骤4:

也是写一个函数

@register.simple_tag #也是固定不变的
def func(v1,v2,v3):
过滤内容

步骤5:

  在HTML文件中,写你自定义的标签

  {% func 属性1 属性2 属性3 ...%}

  

day058 聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁的更多相关文章

  1. day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁

    一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...

  2. Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询

    一:聚合,分组查询 二:F, Q查询

  3. Django之自定义标签,过滤器,以及inclusion_tag

    目录 Django之自定义标签,过滤器,以及inclusion_tag 自定义过滤器 自定义标签 inclusion_tag inclusion_tag() 项目实例: inclusion_tag() ...

  4. Django聚合分组查询、常用字段

    首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...

  5. day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理

    归纳总结的笔记: day67 ORM 特殊的语法 一个简单的语法 --翻译成--> SQL语句 语法: 1. 操作数据库表 创建表.删除表.修改表 2. 操作数据库行 增.删.改.查 怎么连数据 ...

  6. Django框架(六)--模板层:变量、过滤器、标签、自定义标签和过滤器

    将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def c ...

  7. Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件

    模板层 模板层就是html页面,Django系统中的(template) 一.视图层给模板传值的两种方法 方式一:通过键值对的形式传参,指名道姓的传参 n = 'xxx'f = 'yyy'return ...

  8. Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器

    目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...

  9. django 组件 自定义过滤器 自定义标签 静态文件配置

    组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style= ...

随机推荐

  1. Python基础(十三) 为什么说python多线程没有真正实现多现程

    Python中的多线程没有真正实现多现程! 为什么这么说,我们了解一个概念,全局解释器锁(GIL). Python代码的执行由Python虚拟机(解释器)来控制. Python在设计之初就考虑要在主循 ...

  2. Go 初体验 - 令人惊叹的语法 - defer.4 - defer 对宿主函数返回值的影响

    defer 函数可以影响宿主函数的返回值 看代码: 调用: 输出: 结果又让人意外了. coo1:因为传引用,return 时 i = 100, return 返回的也是 100,return 执行之 ...

  3. HTML 鼠标坐标和元素坐标

    在这一篇文章中,将会介绍鼠标坐标.元素坐标以及鼠标在指定元素内的坐标. 1. 鼠标坐标 在触发鼠标相关事件时(如:click.mousemove),可以通过事件对象获取当前鼠标的坐标. 获取的坐标可分 ...

  4. Zookeeper 3.5启动时 8080端口被占用

    今天闲来无事,学习Zookeeper,下载了Zookeeper的最新版本3.5.启动以后显示: ZooKeeper JMX enabled by default Using config: /opt/ ...

  5. select报错

    query = query.Where(c => c.MfcKey==temp); int hhho = query.Count(); query = from q in query join ...

  6. 《数据仓库ETL工具箱》读书笔记

    在本书中,你将学习到以下内容: 规划&设计你的ETL系统 从多种可能的架构中选出最合适的 对实施过程进行管理 管理日常的操作 为ETL过程建立开发/测试/生产环境 理解不同的后台数 ...

  7. CSS——对height和line-height的理解

    最近在做CSS界面时经常遇到line-height和height这两个属性,一直没搞很明白,今天静下心来好好网上查阅了一下,算是有所领悟.https://blog.csdn.net/a20131263 ...

  8. K8S学习笔记之Kubernetes数据持久化方案

    在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途. 0x00 Emptydir EmptyDir是一个空目录, ...

  9. 2018-2019-1 20189206 《Linux内核原理与分析》第八周作业

    #linux内核分析学习笔记 --第七章 可执行程序工作原理 学习目标:了解一个可执行程序是如何作为一个进程工作的. ELF文件 目标文件:是指由汇编产生的(*.o)文件和可执行文件. 即 可执行或可 ...

  10. FJUT3701 这也是一道数论题(线段树)题解

    Problem Description 好久没出数据结构题,现在赶紧来做道数据结构题热热身 小q现在要去银行,他有个很厉害的bug能看到前面排队的人.假如当前有人正在办理业务,那么肯定要等待前一个人完 ...