django----对model查询扩展
基于对象关联查询
一对多查询(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查询扩展相关推荐
- Django的model查询操作 与 查询性能优化
Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...
- django正反向查询
django正反向查询 当我们的表存在外键想要从一找多的时候该怎么查找,当我们从多找一的时候又应该怎么查找. 一找多 首先我们要创建一个项目,在项目的model.py中创建两个模型. from dja ...
- Django模型Model的定义
概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...
- django之ORM查询操作(二)
文章目录 查询集 基础条件查询--针对一个属性 F和Q对象 聚合函数 统计总的阅读量 关联查询 基础关联查询 内连接查询 自关联查询 查询集 查询集: 表示从数据库中获取的模型对象集合 在管理器上调用 ...
- Django之Model操作
Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field)- int自增列,必须填入参数 primary_key ...
- Django之Model组件
Model组件在django基础篇就已经提到过了,本章介绍更多高级部分. 一.回顾 1.定义表(类) ##单表 from django.db import modelsclass user(model ...
- 00x: Django models.Model详解
Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...
- Python之路【第二十二篇】:Django之Model操作
Django之Model操作 一.字段 AutoField(Field)- int自增列,必须填入参数 primary_key=TrueBigAutoField(AutoField)- bigint自 ...
- 11. django多表查询part1
django多表查询part1 一.多表操作之模型创建 1.多张表的关系: 2. models.py中建立出来 3.同步到mysql数据库 4. 注意点: 二.一对多添加表记录 三.多对多添加.修改. ...
- Python之Django 模型Model
1. 定义模型 1.1 定义模型 在项目子应用的models.py 文件中定义模型类 1) 数据库表名 模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名. 可通过内部 ...
最新文章
- 2020-10-26runtime error: member access within null pointer of type ‘struct ListNode‘ (solution.cpp)错
- UF_DRAW_set_view_display 使用问题
- TNN API说明文档
- linux oracle 01157,Oracle数据库启动时出现ORA-01157和ORA-01110问题
- 关于linux kernel编译的几项关键点:
- 物理学家张首晟:如果世界末日来临,我会带这几句话上诺亚方舟|研习社演讲实录...
- 这几个公众号带你看看BAT的工作情况
- Docker部署nginx并修改配置文件
- Software Testing - UI自动化测试常用设计模式之原型(Java)
- Ubuntu 报错 malloc(): unsorted double linked list corrupted
- 方波通过RC滤波器波形-Matlab仿真
- 'wx' is not defined no-undef
- Dynamic Head: Unifying Object Detection Heads with Attentions
- 20行Python 代码批量抓取免费高清图片!
- Windows和Linux的环境变量
- Qiskit 学习笔记1
- Allegro174版本新功能介绍之和172版本兼容设置
- 网络云存储技术Windows server 2012 (项目二十 一 基于Cluster的高可用企业WEB服务器的部署)
- vue学习之生命周期,钩子函数执行顺序
- STM32F407获取OV7670摄像头图像及上位机解码(一维码二维码)