关于查询知识点总结

models.Book.objects.filter(**kwargs): querySet [obj1,obj2]
models.Book.objects.filter(**kwargs).values(*args) : querySet [{},{},{}]
models.Book.objects.filter(**kwargs).values_list(title) : querySet [(),(),()]

跨表查询总结:

1、创建表

class Book(models.Model):
  title = models.CharField(max_length=32)   publish=models.ForeignKey("Publish") # 创建一对多的外键字段
  authorList=models.ManyToManyField("Author") # 多对多的关系,自动创建关系表 class Publish(models.Model):
  name = models.CharField(max_length=32)
  addr = models.CharField(max_length=32) class Author(models.Model):
  name=models.CharField(max_length=32)
  age=models.IntegerField()   ad=models.models.OneToOneField("AuthorDetail") #创建一对一的关系 class AuthorDetail(models.Model):
  tel=models.IntegerField()

2、基于对象关联查询: 

if 一对多查询(Book--Publish):
  正向查询,按字段:
  book_obj.publish : 与这本书关联的出版社对象 book_obj.publish.addr: 与这本书关联的出版社的地址
  反向查询,按表名_set
  publish_obj.book_set: 与这个出版社关联的书籍对象集合 publish_obj.book_set.all() :[obj1,obj2,....]

if 一对一查询(Author---AuthorDetail):
  正向查询,按字段:
  author_obj.ad : 与这个作者关联的作者详细信息对象

  反向查询:按表名:
  author_detail_obj.author : 与这个作者详细对象关联的作者对象

if 多对多(Book----Author):

  正向查询,按字段:

  book_obj.authorList.all(): 与这本书关联的所有这作者对象的集合 [obj1,obj2,....]

    book_obj.authorList.all().values("name"): 如果想查单个值的时候可以这样查

  反向查询,按表名_set:
  author_obj.book_set.all() : 与这个作者关联的所有书籍对象的集合

  book_obj.book_set.all().values("name"): 如果想查单个值的时候可以这样查

基于双下滑线的跨表查询:

if 一对多查询(Book--Publish):
  正向查询,按字段:

 # 查询linux这本书的出版社的名字:
  models.Book.objects.all().filter(title="linux").values("publish__name")

  反向查询:按表名:

# 查询人民出版社出版过的所有书籍的名字
  models.Publish.objects.filter(name="人民出版社出版").values("book__title")

if 一对一查询(Author---AuthorDetail):
  正向查询,按字段:

#查询egon的手机号
  models.Author.objects.filter(name="egon").values("ad__tel")

  反向查询:按表名:

#查询手机号是151的作者
  models.AuthorDetail.objects.filter(tel="151").values("author__name")

if 多对多(Book----Author):
  正向查询,按字段:

#查询python这本书的作者的名字
  models.Book.objects.filter(title="python").values("authorList__name") [{},{},{},{}]

  正向查询,按表名:

#查询alex出版过的出的价格
models.Author.objects.filter(name="alex").values("book__price")

注意:

publish=models.ForeignKey("Publish",related_name="bookList")
authorlist=models.ManyToManyField("Author",related_name="bookList") 
ad=models.models.OneToOneField("AuthorDetail",related_name="authorInfo")
反向查询的时候都用:related_name的值

聚合查询:
querySet().aggregate(聚合函数)------返回的是一个字典,不再是一个querySet
Book.objects.all().aggregate(average_price=Avg('price'))

分组查询:
querySet().annotate() --- 返回的是querySet

#统计每一个出版社中最便宜的书籍的价格

sql:   select Min(price) from book group by publish_id;
ORM:  models.Book.objects.values("publish__name").annotate(Min("price"))

Django【第8篇】:Django之查询知识点总结的更多相关文章

  1. Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数

    Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...

  2. Django进阶Model篇007 - 聚集查询和分组查询

    接着前面的例子,举例聚集查询和分组查询例子如下: 1.查询人民邮电出版社出了多少本书 >>> Book.objects.filter(publisher__name='人民邮电出版社 ...

  3. Django(十二)—关于查询知识点总结

    https://www.cnblogs.com/haiyan123/p/7763710.html models.Book.objects.filter(**kwargs):   querySet   ...

  4. Django基础-04篇 Django开发前后端联动

    1. 写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:i ...

  5. 关于Django查询知识点总结

    ========关于Django查询知识点总结======= models.Book.objects.filter(**kwargs): querySet [obj1,obj2] models.Boo ...

  6. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  7. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  8. Python之路,Day15 - Django适当进阶篇

    Python之路,Day15 - Django适当进阶篇   本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...

  9. Python开发【第十八篇】Web框架之Django【基础篇】

    一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...

随机推荐

  1. 3、maven导入外部自定义jar包

    有些时候我们自己有一些jar包需要导入到我们的仓库中,然后在maven项目里的pom.xml文件加入这些jar包的依赖即可使用这些jar包了 1.确保行执行mvn -v没有问题 2.把需要引入的jar ...

  2. 【MAC】 命令行解压缩 rar 文件

    使用Mac解压rar文件很简单,总共分2步.step1:安装解压工具,step2:解压 1.使用Homebrew安装unrar brew install unrar 2.cd到rar文件的目录下,然后 ...

  3. Golang基础(1):Go数据类型和变量

    一:Go数据类型 1.1 Go语言按照分类有以下几种数据类型 布尔型 布尔型的是一个常量true或者false 数字类型 整型int和浮点型 float32, float64 字符串类型 字符串就是一 ...

  4. itchat初步解读登录(转)

    原文:https://blog.csdn.net/coder_pig/article/details/81357810 itchat的登录采取的是通过itchat.auto_login()这个函数来完 ...

  5. CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器

    提示工具 提示框在鼠标移动到特定的元素上显示 设置提示框的位置 给提示框添加箭头 提示框的淡入效果 提示框美化 图片廓 响应式图片廓 图像透明 创建透明图像——悬停效果 ———鼠标放置后———> ...

  6. linux下 sleep() 与 usleep()

    usleep() 将进程挂起一段时间, 单位是微秒(百万分之一秒): 头文件: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数 ...

  7. [Vim] 02 用 Windows 下的 gVim 假装 Linux 下的 Vim

    0. 前言 这应该是极简配置,"极简"就是字面意思 我安装的版本是 8.1.1 来看个素颜 1. 找到 _vimrc 文本 我装在 E:\Program Files (x86)\V ...

  8. HashMap中确定数组位置为什么要用hash进行扰动

    HashMap数据存储的过程先根据key获得hash值,通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存 ...

  9. HNUSTOJ-1636 心电图

    1636: 心电图 时间限制: 1 Sec  内存限制: 128 MB提交: 583  解决: 231[提交][状态][讨论版] 题目描述 众所周知,ACM/ICPC实验室聚集了一堆学霸Orz 有学霸 ...

  10. neo4j 初探

    neo4j 初探 参考 转载:http://shomy.top/2018/06/08/neo4j-start/ 近期需要处理图数据,考察后打算使用neo4j, 相比其他一些图数据库,neo4j开源,跨 ...