基于对象关联查询

一对多查询(Book--Publish):

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

一对一查询(Author---AuthorDetail):

正向查询,按字段:author_obj.ad : 与这个作者关联的作者详细信息对象
反向查询:按表名:author_detail_obj.author : 与这个作者详细对象关联的作者对象

多对多(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"): 如果想查单个值的时候可以这样查

 

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

一对多查询(Book--Publish)

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

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

一对多查询(Book--Publish)

正向查询,按字段:
#查询egon的手机号
models.Author.objects.filter(name="egon").values("ad__tel")反向查询:按表名:
#查询手机号是151的作者
models.AuthorDetail.objects.filter(tel="151").values("author__name")

多对多(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的值,不用_set

聚合查询

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"))

only和defer

datalist = models.Userinfo.objects.all().only("name","email")  #拿到的还是一个QuerySet集合,仅仅取name和email
for item in datalist:print(item.id)print(item.name)print(item.pwd)   #只要表里有这个字段,一样会取到值,额外的会再发一次请求datalist = models.Userinfo.objects.all().defer("name","email") #阻止,不取name和email
for item in datalist:print(item.id)print(item.pwd)

注意:用only的话就去取only里面的字段,取其他的字段效率太低了,尽可能的少的连接数据库

转载于:https://www.cnblogs.com/yanxiaoge/p/10585881.html

django----对model查询扩展相关推荐

  1. Django的model查询操作 与 查询性能优化

    Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...

  2. django正反向查询

    django正反向查询 当我们的表存在外键想要从一找多的时候该怎么查找,当我们从多找一的时候又应该怎么查找. 一找多 首先我们要创建一个项目,在项目的model.py中创建两个模型. from dja ...

  3. Django模型Model的定义

    概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...

  4. django之ORM查询操作(二)

    文章目录 查询集 基础条件查询--针对一个属性 F和Q对象 聚合函数 统计总的阅读量 关联查询 基础关联查询 内连接查询 自关联查询 查询集 查询集: 表示从数据库中获取的模型对象集合 在管理器上调用 ...

  5. Django之Model操作

    Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field)- int自增列,必须填入参数 primary_key ...

  6. Django之Model组件

    Model组件在django基础篇就已经提到过了,本章介绍更多高级部分. 一.回顾 1.定义表(类) ##单表 from django.db import modelsclass user(model ...

  7. 00x: Django models.Model详解

    Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...

  8. Python之路【第二十二篇】:Django之Model操作

    Django之Model操作 一.字段 AutoField(Field)- int自增列,必须填入参数 primary_key=TrueBigAutoField(AutoField)- bigint自 ...

  9. 11. django多表查询part1

    django多表查询part1 一.多表操作之模型创建 1.多张表的关系: 2. models.py中建立出来 3.同步到mysql数据库 4. 注意点: 二.一对多添加表记录 三.多对多添加.修改. ...

  10. Python之Django 模型Model

    1. 定义模型 1.1 定义模型 在项目子应用的models.py 文件中定义模型类 1) 数据库表名 模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名. 可通过内部 ...

最新文章

  1. 2020-10-26runtime error: member access within null pointer of type ‘struct ListNode‘ (solution.cpp)错
  2. UF_DRAW_set_view_display 使用问题
  3. TNN API说明文档
  4. linux oracle 01157,Oracle数据库启动时出现ORA-01157和ORA-01110问题
  5. 关于linux kernel编译的几项关键点:
  6. 物理学家张首晟:如果世界末日来临,我会带这几句话上诺亚方舟|研习社演讲实录...
  7. 这几个公众号带你看看BAT的工作情况
  8. Docker部署nginx并修改配置文件
  9. Software Testing - UI自动化测试常用设计模式之原型(Java)
  10. Ubuntu 报错 malloc(): unsorted double linked list corrupted
  11. 方波通过RC滤波器波形-Matlab仿真
  12. 'wx' is not defined no-undef
  13. Dynamic Head: Unifying Object Detection Heads with Attentions
  14. 20行Python 代码批量抓取免费高清图片!
  15. Windows和Linux的环境变量
  16. Qiskit 学习笔记1
  17. Allegro174版本新功能介绍之和172版本兼容设置
  18. 网络云存储技术Windows server 2012 (项目二十 一 基于Cluster的高可用企业WEB服务器的部署)
  19. vue学习之生命周期,钩子函数执行顺序
  20. STM32F407获取OV7670摄像头图像及上位机解码(一维码二维码)

热门文章

  1. EDA实验课课程笔记(五)——NC-verilog的介绍与使用(一)
  2. antd如何获取表单的值_JavaScript多个表单序列化获取值
  3. 子元素应该margin-top为何会影响父元素【转】
  4. erp核心目的及erp特点
  5. ado.net知识点博客网址
  6. springboot整合websocket进行消息推送
  7. 如果你身边有这样的人,赶紧让他说点什么,然后反过来买彩票
  8. googletest,笔记20190821
  9. 树莓派+docker+tensorflow
  10. html中什么是围堵标签,HTML回顾(基础标签)