首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django分组聚合查询实例分享

增删改 一多:先一后多,可以为对象或依赖表的主键(publish and book) publish = Publish.objects.create() Book.objects.create(...high_price 50; 聚合查询—基于ORM 聚合函数的使用场景: 单独使用:不分组,只查聚合结果 分组使用: 字段分组,可查分组字段与聚合结果 导入聚合函数: from django.db.models...可以同时多个字段进行聚合处理: aggregate(name1= , name2= …) 2. 是QuerySet 对象的方法(all,filter) 3. 返回为dict类型 4....(本身字段,关联字段) 断开外关联的ForeignKey使用(一多,一一) # 一多查询 —-(publish and book) # 方式一 : 不使用,在book 中添加 publish_id...# 断开关联(db_constraint属性)的多多自动创建关系表 (book() and author) # 断开后依然支持Django ORMlianiao 查询语法 # 当新表中无需新加额外字段

1.8K10
您找到你想要的搜索结果了吗?
是的
没有找到

06.Django基础五之django模型层(二)多表操作

一 创建模型 表和表之间的关系     一一、多一、多多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束的区别,一一的约束是在一多的约束上加上唯一约束...注意事项: 表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的 对于字段Django 会在字段名上添加"_id" 来创建数据库中的列名...字段 ForeignKey 有一个 null=True 的设置(它允许接受空 NULL),你可以赋给它空 None 。   ...与之关联的设置为可执行对象的返回,设置:models.SET(可执行对象) ForeignKey的db_contraint参数 关系和约束大家要搞清楚,我不加能不能表示两个表之间的关系啊,当然可以...但是我们就不能使用ORM相关的方法了,所以我们单纯的将换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM方法的。

2.7K20

Django学习笔记之ORM多表操作

注意事项:  表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的  对于字段Django 会在字段名上添加"_id" 来创建数据库中的列名...字段 ForeignKey 有一个 null=True 的设置(它允许接受空 NULL),你可以赋给它空 None 。 添加表纪录  操作前先简单的录入一些数据: publish表: ?...''' 正向查询字段,反向查询表名小写用来告诉ORM引擎join哪张表 ''' 一多查询 # 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一多) # 正向查询 字段...的名称是聚合的标识符,是计算出来的聚合的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合指定一个名称,可以向聚合子句提供它。...总结 :跨表分组查询本质就是将关联表join成一张表,再按单表的思路进行分组查询。

2.8K40

Django 模型层之多表操作

Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于字段,Django会在字段名上添加..."_id"来创建数据库中的列名 3.字段ForeignKey有一个null=True的设置,你可以赋给它空None 二.添加表记录 一一: # 方式一: detail_obj = models.AuthorDetail.objects.filter...,列表内可以是对象,也可以是id book.authors.set() 三.基于对象的跨表查询 一一查询 正向查询(字段:authordetail) # 查询作者姓名为Yven的手机号 yven =...的名称是聚合的标识符,是计算出来的聚合,的名称是按照字段和聚合函数的名称自动生成出来的,如果你想要为聚合指定一个名称,可以向聚合子句提供一个名字。...8.Sum 返回给定字段的总和 分组查询:annotate() annotate()为调用QuerySet种每一个对象都生成一个独立的统计,相当于数据库种的group by 统计每一本书作者个数

1.3K20

Django 系列博客(十二)

的名称是聚合值得标识符,是计算出来的聚合。建的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合指定个名称,可以向聚合子句提供它。...# 查询所有作者写的书的总价格大于26的 # filter()在annotate后面,表示对分组后的结果进行筛选,相当于having # annotate前的values()表示字段分组,相当于group...('name') # 把所有书的评论数加1 models.Book.objects.all().update(commit_num=F('commit_num')+1) Q 查询 什么是 Q 查询 两个字段进行或...: 约束性太强 查询效率低 可以通过db_constraint=False来取消约束,在 orm 创建表的时候,的约束不会存在,但是这样会产生脏数据。...建约束,包括 unique 都是为了不产生脏数据。

45240

Django ORM

目录 Django ORM ORM实操之数据库迁移 ORM实操之字段的修改 ORM实操之数据的增删改查 数据库同步 ORM创建表关系 Django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析...无名分组和有名分组反向解析 Django ORM ORM:对象映射关系程序 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了...,而不用直接使用sql语言; python与MySQL映射关系 Python 映射 MySQL 类 -------> 表 对象 -------> 表里面的数据 对象点属性 -------> 字段对应的...、多多、一一,没关系暂且排外,下面演示如何通过ORM来创建确立表关系~ ORM创建字段的位置: 一多:创建在多的一方 一堆一:创建在任何一方都可以,但是推荐创建在查询频率较高的表中 多多...,当作了视图函数的第二个位置参数''' 有名分组 在使用路由的时候,正则表达式可以起别名,别名当作关键字参数传给视图函数; 没有关键字参数写报错 别名,传参 '''urls.py

4K10

一篇文章带你了解Django ORM操作(高端篇)

分组操作 分组操作,就是将某一列,相同的进行压缩,然后就可以得出压缩的数量。 如果压缩的是,还可以取出外的详细信息。 示例:查询出每个出版社出版的数量。...通过研究表结构发现,每出版的书,都在book表中记录,并且每本书会一个出版社id。 ? 如果我们能对出版社id进行压缩,然后再求出压缩出版社id里面对应的数量。 啧啧,这不就出来了吗?...分组获取字段信息 上述确实可以通过分组实现了功能。 但是上述只能获取出版社id,并不能获取出版社名啥的,但是如何获取压缩字段详细信息呢?...注:分组(annotate)后面跟的values。 里面只能写字段的列和annotate里面的列,不能写其他。 如果分组分的不是字段,那就不能再跟values!...分组再筛选 分组再筛选本质就是原生sql的group by .. having,将压缩完的数据在进行条件判断。 但是压缩的数据进行判断只能通过having。

1.2K11

Django中基表的创建、字段属性简介、脏数据概念、子序列化

通过逻辑将A、B表进行连表查询,不会有任何异常。如两张表建立了一字段在A表,那么先往B表写数据就更合理。...更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外中设置反向查询的字段名:正向找字段名,反向找related_name...SET_DEFAULT:假设A表依赖B表,B记录删除,A表的字段重置为default属性设置的,所以必须配合default属性使用。...例子:部门没有了,部门员工里的部门字段改为未分组部门的id SET_NULL使用的时候需要NULL=True;假设A表依赖B表,B记录删除,A表的字段重置为NULL,所以必须配合NULL=True使用...例子:部门没有了,部门员工里的部门字段改为未分组部门的id字段为NULL 注:多字段不能设置on_delete级联关系,如果要处理级联关系,需要手动明确关系,处理表关系中的多个 3)db_constraint

4.3K30

Django之ORM

Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段 一.数据库的连接 Django...这里的id是自动创建的,school_id是school添加产生的 如果想要与另一张表的其他字段添加,需要在加上参数to_filed=’字段名’,同时这个字段必须是unique=True 2.一一....num) 拿时对象字段 student1 = student.objects.filter(id=2)[0] print(student1.school.name) 拿多多关系的字段 因为是多多关系...使用’__’进行的查找 一多 school_name为对象字段 school为student表中设置的字段 student1=student.objects.filter(id=2).values...对象进行计算得到一个结果作为字典中的放到一个字典中 这里先引入一些聚合方法 from django.db.models import Avg,Min,Sum,Max 举例: result=student.objects.all

1.1K30

Django---ORM操作大全

小写表名; 1多:对象..关联表字段,values(字段__关联表字段) 多多:字段.all() 反向连表操作总结:  通过value、value_list、fifter 方式反向跨表...1多关系,也称为多多关系; 在orm中设置如果 A表设置了字段user=models.ForeignKey('UserType')到B表(注意外表名加引号) 就意味着 写在写A表的B表主键,...1、aggregate(*args,**kwargs)  聚合函数 通过QuerySet进行计算,返回一个聚合的字典。...此时Django为我们提供了F和Q查询: 1、F 可以获取对象中的字段的属性(列),并进行操作; from django.db.models import F,Q #F 可以获取对象中的字段的属性...import F,Q 1、F 可以获取对象中的字段的属性(列),并且进行操作; # models.Book.objects.all().update(price=F('price'

6.8K100

django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值的字典。的名称是聚合的标识符,是计算出来的聚合的名称是按照字段和聚合函数的名称自动生成出来的。...连接和聚合 至此,我们已经了解了作用于单种模型实例的聚合操作, 但是有时,你也想所查询对象的关联对象进行聚合。...例如,我们可以查询所有出版商,并注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 的反转关系): >>> from django.db.models import...作用于普通模型字段的任何 filter()(或 exclude()) 都会对聚合涉及的对象进行限制。 使用annotate() 子句时,过滤器有限制注解对象的作用。...不是在原始的 QuerySet返回结果中每个对象中添加注解,而是根据定义在values() 子句中的字段组合先结果进行唯一的分组,再根据每个分组算出注解, 这个注解是根据分组中所有的成员计算而得的

1.6K30

Django之模型层(多表操作)

一、创建模型   1,一多关系   一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把写在‘多...’的一方,即我们要把写在book类。...,对于字段分完组后的n个组,此时aggregate()就不能循环每个分组作用,它只会得到第一组的结果   2,分组   2.1 单表分组查询 查询每一个部门名称以及对应的员工数 emp: id...dep’进行分组 annotate()每个分组进行操作   2.2 多表分组查询 每一个出版社的名称和出版过的书籍个数 Publish.objects.values('name').annotate...ss字段取出来,就相当于一个纯数字了,可以进行加减乘除操作 查询物理成绩大于生物成绩两倍的学生 student.objects.filter(ws__gt=F('ss')*2) 把每个学生的物理成绩加上

60220

Django之ORM对数据库操作

此时可以使用distinct(),注意只有在PostgreSQL中支持字段去重。)...它存在于下面两种情况: 关系的反向查询 多多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值的字典。 的名称是聚合的标识符,是计算出来的聚合。...的名称是按照字段和聚合函数的名称自动生成出来的。...如果我们要对两个字段做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段

1.3K110

Django ORM 多表操作(二)

目录 Django ORM 多表操作(二) 多多操作常用API 分组查询 单表分组查询示例 多表分组查询练习 查询练习 ORM 事务 ORM 常见字段和参数 ORM常见字段 ORM 常见参数 choices...Django ORM 多表操作(二) 多多操作常用API add remove clear set 示例 # 当前生成的书籍对象 book_obj=Book.objects.create(...django.db.models import Avg,Max,Min,Count,Sum # 引入函数 返回分组后,用 values 取值,则返回是 QuerySet 数据类型里面为一个个字典...Author(models.Model): name = models.CharField(max_length=32, verbose_name="作者姓名") # 自己创建第三张表,分别通过关联书和作者...author", "book")) # through_fields接受一个2元组('field1','field2'): # 其中field1是定义ManyToManyField的模型的名

1K20

Mysql基础

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳的最大长度不同。...-- 位置字段筛选 select * from order_menu group by 5; -- 练习:购物表类名分组后显示每一组商品的价格总和...select class,SUM(price)from order_menu group by class; -- 练习:购物表类名分组后显示每一组商品价格总和超过...: 如果在父表中找不到候选,则不允许在子表上进行insert/update --约束父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条...(了解) ------No action方式 在mysql中同Restrict,如果子表中有匹配的记录,则不允许父表对应候选 -- 进行update/delete操作(了解) 多表查询 准备表

4.2K20

Django ORM 多表操作

目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加) 一多( ForeignKey) 一一 (OneToOneFeild) 多多...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一一:一一推荐建在查询频率高的一方 一多:字段建在多的一方 多多:字段建在查询频率多的一方,在Django第三张表不需要创建...添加数据(添加) 一多( ForeignKey) 方式一: 传对象的形式,返回的数据类型是对象,书籍对象 步骤: 获取出版社对象 给书籍的出版社属性 pulish 传出版社对象 '''test.py...id 的形式(常用) 一多中,设置属性的类(多的表)中,MySQL 中显示的字段名是:属性名_id。...口诀: 正向查询字段 反向查询表名小写 注意: 正向:属性名 反向:小写类名加 _set 反向查询的时候查询的对象可能有多个的情况加__set,查询的对象只有一个的情况不需要加 基于对象的跨表查询

1.7K20

Django之路由层

""" 一字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ # 书跟作者是多多的关系字段建在任意一方都可以...字段建在任意一方都可以,但是建议建在查询频率较高的那一方 author_detail = models.OneToOneField(to='Author_detail') # fk +...unique """ 一字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ class...、多多的表关系建立在任意一方都可以,建议建在查询频率高的一方 一字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id...多多关系,django orm会自动帮我们创建书籍和作者的第三张关系表 #的建立 publish = models.ForeignKey(to='Publish') author = models.ManyToManyField

1.3K21
领券