12月11日学习内容整理:ORM中的基于双下划线的跨表查询,反向查询,聚合和分组...

Django ORM 查询详解
本文详细介绍了Django ORM中基于对象及双下划线的跨表查询方式,并讲解了一对多、多对多及一对一关系的查询方法。此外,还介绍了如何使用聚合函数进行数据汇总及分组统计。

基于对象的跨表查询转换为sql语句是sql中的子查询

基于双下划线的跨表查询转换为sql语句是sql中的join

 

 

一、基于对象的反向查询

正向:关联字段在哪张表中,通过这张表查询就是正向的,一对多的关系来说,关联字段肯定在多的那张表中,所以一查多就是反向,多查一就是正向

1、一对多

model对象.另一张表名_set.all()      就拿到了当前model对象在另一张表中对应的model对象的集合

返回queryset类型

 

2、多对多

model对象.另一张表名_set.all()   就拿到了当前model对象在另一张表中对应的model对象的集合

返回queryset类型

 

3、一对一

model对象.另一张表名(全部小写)  就拿到了在另一张表中对应的model对象

返回model对象

正向的一对一就是model对象.关联字段就拿到了在另一张表中对应的model对象

 

 

二、基于双下划线的跨表查询

1、一对多

正向:queryset类型.values(关联字段_ _字段名)      循环queryset类型中的每一个model对象,关联字段_ _字段名就拿到了循环的每一个model对象对应另一张表中的model对象的字段值

反向:表名_ _字段名

 _ _这样的查询方法不仅可以用到values,也可以用到filter等查询API中,但一定要注意是queryset类型去调用

 

多对多和一对一跟一对多都是一样的,正向按关联字段用,反向按表名用

 

三、聚合

先引入聚合函数:from   django.db.models  import  Avg,Max,Min,Sum,Count

queryset类型.aggregate(变量名=聚合函数名(字段名))

返回一个字典,字典的key就是这个变量名,没写变量名的话就自动生成,value值就是聚合函数计算出来的值

若使用多个聚合函数,就在括号里面继续添加就可以了,用逗号隔开

 

四、分组(就是sql语句中的group by)

queryset类型集合.annotate(变量名=聚合函数名(字段名))      

返回queryset类型

queryset集合调用,集合中的每一个model对象就是一个分组,不会重复,annotate再进行分组统计,统计用聚合函数实现,统计依据的字段名可以是model对象自身的字段,若要对关联表的字段进行统计,那聚合函数中的字段名就得是双下划线跨表查询的语句了

 

转载于:https://www.cnblogs.com/wanghl1011/articles/8023767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值