2018-11-14
一  \\  基于双下划线的跨表查询:
          套路一样,用__跨表
-一对多
-多对多 from app.models import * 查询出版社为北京出版社出版的所有图书的名字,价格
ret=Publish.objects.filter(name='北京出版社').values('book__name','book__price') 查询红楼梦的所有作者名字
ret=Book.objects.filter(name='红楼梦').values('authors__name') 进阶练习--连续跨表
查询北京出版社出版过的所有书籍的名字以及作者的姓名
ret=Publish.objects.filter(name='北京出版社').values('book__name','book__authors__name') 二 \\ 聚合查询
from django.db.models import Avg,Count,Max,Min,Sum
1.计算所有图书的平均价格
ret = Book.objects.all().aggregate(Avg('price')) #可以省略all()
print(ret)
2. 计算图书的最高价格
ret = Book.objects.aggregate(Max('price'))
print(ret)
3. 计算图书的最高价格,最低价格,平均价格,总价
ret = Book.objects.aggregate(Max('price'),Min('price'),Avg('price'),Sum('price'))
print(ret)
三 \\ 分组查询
终极总结:
values在前,表示group by,在后,表示取值
filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
1.统计每一本书作者个数
ret = Book.objects.annotate(c=Count('authors')).values('name','c')
print(ret) 2.统计每一个出版社的最便宜的书(以谁group by 就以谁为基表)
ret = Publish.objects.annotate(m=Min('book__price')).values('name','m')
print(ret) 3.统计每一本以py开头的书籍的作者个数
ret = Book.objects.filter(name__startswith='py').annotate(m=Count('authors')).values('name','m')
print(ret) 4.查询各个作者出的书的总价格
ret = Author.objects.annotate(m=Sum('book__price')).values('name','m')
print(ret) 5.查询名字叫lqz作者书的总价格
ret = Author.objects.filter(name='lqz').annotate(m=Sum('book__price')).values('name','m')
print(ret) 6.查询所有作者写的书的总价格大于30
ret = Book.objects.annotate(s=Sum('authors__book__price')).filter(s__gt=900).values('authors__name','s')
print(ret)
四  \\  F查询与Q查询
F查询 
1.查询评论数大于阅读数的书
ret = Book.objects.filter(commit_num__gt=F('read_num'))
print(ret) 2.把所有书的评论数加1
ret = Book.objects.update(commit_num=F('commit_num') + 1) 3.把python这本书的阅读数减5
ret = Book.objects.update(read_num=F('read_num')-5) Q函数 为了表示与& ,或 | ,非 ~
# 1.查询作者名字是lqz或者名字是egon的书
ret = Book.objects.all().filter(Q(authors__name='zjh') | Q(authors__name='egon')).values('name')
print(ret) # 2.查询作者不是zjh的书
ret = Book.objects.all().filter(~Q(authors__name='zjh')).values('name')
print(ret)


ret = Publish.objects.filter(name='北京出版社').values('name','book__name','book__authors__name')

django之多表查询-2的更多相关文章

  1. Django 之多表查询 与多表的使用

    1.django的多表查询 主要区分为: 正向查询    逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对 ...

  2. Django开发之路 二(django的models表查询)

    django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...

  3. 第五章、Django之多表查询进阶与事务

    目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...

  4. django之跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  5. Django框架----跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  6. django之多表查询与创建

    https://www.cnblogs.com/liuqingzheng/articles/9499252.html # 一对多新增数据 添加一本北京出版社出版的书 第一种方式 ret=Book.ob ...

  7. django之多表查询

    一.创建模型 在Models创建如下模型: from django.db import models # Create your models here. # 用了OneToOneField和Fore ...

  8. Django模板及表查询笔记

    模板层 后端朝html页面传递数据 两种给html页面传递数据的方式 第一种: render(request,'index.html',{'user_list':user_list}) 第二种 ren ...

  9. Django ORM多表查询练习

    ORM多表查询 创建表结构: from django.db import models # 创建表结构 # Create your models here. class Class_grade(mod ...

随机推荐

  1. linux学习笔记命令篇1---命令ls

    前言:  linux中接触最多的就是命令和文件. 命令 命令是有其格式的, 一般格式是command [option] parameter1 parameter2 [paramete3 ...]: 注 ...

  2. JavaScript中数组常用方法的总结

    JavaScript中数组Array常用的方法总结 标签(空格分隔): JavaScript ECMAScript数组给我们提供了许多常用的方法,便于我们对数组进行操作,下面,就来总结一下这些方法. ...

  3. 什么是ORM,以及在php上的使用?

    ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...

  4. Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

    Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 解答:会执行,在return前 ...

  5. 获取一个Assembly中的命名空间列表

    通过System.Reflection.Assembly类中提供的方法和属性不能直接获取组件中的命名空间列表.但有方法可以直接获得Assembly中的所有类型,我们便可以通过获取的类型来得到命名空间名 ...

  6. javaEE面试重点

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息.创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  7. python socket 简单例子

    myserver.py: import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serverso ...

  8. webservice linux 杀进程

    一 .  linux 下首先查看进程 ./stopServcer.sh server1如果停不掉websphere服务.则强制杀掉其进程! 1.查看websphere进程号bejqylc06:~ #  ...

  9. C# 文件读写操作整理

    http://www.cnblogs.com/wangshenhe/archive/2012/05/09/2490438.html

  10. BF算法 + KMP算法

    准备: 字符串比大小:比的就是字符串里每个字符的ASCII码的大小.(其实这样的比较没有多大的意义,我们关心的是字符串是否相等,即匹配等) 字符串的存储结构:同线性表(顺序存储+链式存储) 顺序存储结 ...