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

Django分组聚合查询实例分享

增删改 一对多:先一后多,可以为对象或依赖表的主键(publish and book) publish = Publish.objects.create() Book.objects.create(.......publish=publish|publish_id=publish.id) 删: 默认存在级联删除 改: book修改一定存在 多对多: 关系表的获取(book(主键) and author...high_price 50; 聚合查询—基于ORM 聚合函数的使用场景: 单独使用:不分组,只查聚合结果 分组使用: 字段分组,可查分组字段与聚合结果 导入聚合函数: from django.db.models...是QuerySet 对象的方法(all,filter) 3. 返回值为dict类型 4....ForeignKey(): 字段 to= 关联模型类 (一对多) to_file = 关联字段,省略默认关联主键 on_delete (关联数据被删除时的操作) models.CASCADE

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

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

一 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束的区别,一对一的约束是在一对多的约束上加上唯一约束...与之关联的值设置为可执行对象返回值,设置:models.SET(可执行对象) ForeignKey的db_contraint参数 关系和约束大家要搞清楚,我不加能不能表示两个表之间的关系啊,当然可以...但是我们就不能使用ORM相关的方法了,所以我们单纯的将换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM方法的。...Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。...这个方法执行原始的SQL查询,返回一个django.db.models.query.RawQuerySet 实例。

2.7K20

Django ORM

无名分组和有名分组反向解析 Django ORM ORM:对象映射关系程序 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了...# 创建书籍表 出版者表 作者表 # 先写表的基本结构,在考虑表关系如何写 # 书籍表 class Book(models.Model): name = models.CharField...max_length=32) price = models.DecimalField(max_digits=8, decimal_places=2) # 总共8位 小数占2位 # 作者...Author = models.ManyToManyField(to='Author') # 出版社 Publish = models.ForeignKey(to='Publish...,当作了视图函数的第二个位置参数''' 有名分组 在使用路由的时候,正则表达式可以起别名,别名当作关键字参数传给视图函数; 没有关键字参数写报错 别名,传参 '''urls.py

4K10

Django学习笔记之ORM多表操作

models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2) # 与Publish建立一对多的关系,字段建立在多的一方...注意事项:  表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的  对于字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...字段 ForeignKey 有一个 null=True 的设置(它允许接受空值 NULL),你可以赋给它空值 None 。 添加表纪录  操作前先简单的录入一些数据: publish表: ?...(pk=1).first() # book_obj.publish 是主键为1的书籍对象关联的出版社对象 print(book_obj.publish.city)   反向查询(表名:book_set...)) Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。

2.8K40

Django 模型层之多表操作

models.CharField(max_length=255) price = models.DecimalField(max_digits=5, decimal_places=2) # ...models.ManyToManyField(to=Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于字段...,Django会在字段名上添加"_id"来创建数据库中的列名 3.字段ForeignKey有一个null=True的设置,你可以赋给它空值None 二.添加表记录 一对一: # 方式一: detail_obj...返回与expression相关的对象的个数,有一个可选的参数distinct,如果distinct=True,那么Count将只计算唯一的实例,默认值是False 6.Max 返回给定字段的最大值...7.Min 返回给定字段的最小值 8.Sum 返回给定字段的总和 分组查询:annotate() annotate()为调用QuerySet种每一个对象都生成一个独立的统计值,相当于数据库种的

1.3K20

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

然而,你有时候会想要获取从一组对象导出的值或者是聚合一组对象。这份指南描述了通过Django查询来生成和返回聚合值的方法。 整篇指南我们都将引用以下模型。这些模型用来记录多个网上书店的库存。...aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。的名称是聚合值的标识符,值是计算出来的聚合值。的名称是按照字段和聚合函数的名称自动生成出来的。...例如,我们可以查询所有出版商,注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 的反转关系): >>> from django.db.models import...不是在原始的 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的...,结果是完全不同的: >>> Author.objects.values('name').annotate(average_rating=Avg('book__rating')) 在这个例子中,作者会名称分组

1.6K30

Django之ORM

这里的id是自动创建的,school_id是school添加产生的 如果想要与另一张表的其他字段添加,需要在加上参数to_filed=’字段名’,同时这个字段必须是unique=True 2.一对一...除了这种方式也可以手动创建一个表,手动添加两个来实现多对多。...id 在student.objects.create中加 school_id=1 通过获取对象设置 obj = school.objects.get(name="school1") student.objects.create....num) 拿时对象的字段 student1 = student.objects.filter(id=2)[0] print(student1.school.name) 拿多对多关系的字段 因为是多对多关系...使用’__’进行的查找 一对多 school_name为对象的字段 school为student表中设置的字段 student1=student.objects.filter(id=2).values

1.1K30

Django---ORM操作大全

) book_obj.save() 多对多 如果两表之间存在双向1对N关系,就无法使用来描述关系了; 只能使用多对多的方式,新增第三张表关系描述表;...小写的表名 得到有关系的列 #因为使用values取值取得是字典的不是对象,所以需要 小写表名(表)__ v = UserGroup.objects.values('id'...''' #写到此处问题就来了,原来两个 对应2张表 2个主键 可以识别男女 #现在两个对应1张表 反向查找 无法区分男女了了 # object对象女.U2U.Userinfo.set...''' #写到此处问题就来了,原来两个 对应2张表 2个主键 可以识别男女 #现在两个对应1张表 反向查找 无法区分男女了了 # object对象女.U2U.Userinfo.set...此时Django为我们提供了F和Q查询: 1、F 可以获取对象中的字段的属性(列),进行操作; from django.db.models import F,Q #F 可以获取对象中的字段的属性

6.8K100

Django ORM 多表操作(二)

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

1K20

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

更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外中设置反向查询的字段名:正向找字段名,反向找related_name...例子:部门没有了,部门员工里的部门字段改为未分组部门的id SET_NULL使用的时候需要NULL=True;假设A表依赖B表,B记录删除,A表的字段重置为NULL,所以必须配合NULL=True使用...例子:部门没有了,部门员工里的部门字段改为未分组部门的id字段为NULL 注:多对多字段不能设置on_delete级联关系,如果要处理级联关系,需要手动明确关系,处理表关系中的多个 3)db_constraint...4.幻读:一个事务相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足查询条件的新数据,这种现象就称为“幻读”。...如果涉及到通过进行跨表查询,然后再将查询数据反序列化到前台就需要用到子序列化,比如下面的例子:我们查询出版社信息的时候连带将book表中的该出版社所出版过的书名一查出来。

4.3K30

Django3.2边学边记—Adimn站点管理

控制显示的列,Django 会尝试按照这个顺序解释 list_display 的每个元素: 一个模型的字段。 一个可调用对象。 一个代表 ModelAdmin 属性的字符串。...Test, TestAdmin) 过滤器 用 list_filter 来激活管理更改列表页面右侧侧栏的过滤器,如下截图所示: list_filter 应是一个列表或元组,参数字段可以是模型字段,包括字段...(注意list_display是不能直接接收字段的),会将对应字段的值列出来,一般用于快速过滤有重复值的字段。...,返回所有包含这些词的对象,不区分大小写(即 icontains 查找:不区分大小写的包含匹配),其中每个词必须在 search_fields 中至少有一个。...我的理解就是分组整体匹配(Django3.2新增),例如,如果用户搜索 "john winston" 或 'john winston',Django 会做相当于这个 SQL 的 WHERE 子句: 1

1.3K30

DjangoDjango ORM 学习笔记

Manager 在创建完 Model 对象之后,Django 会自动为关联一个 Manager 对象,该对象是 Model 进行数据库操作的接口。...关联查询就是在查询当前实例的同时,把关联的实例数据也一块取出来。在下图中 orm_blog 通过一个和 orm_author 关联。...关联大体上可以分为两种: 只有一个关联实例: 关联中包含的表、OneToOneField,例如下图中的 orm_blog 只与一个 orm_author 的实例关联 有多个关联实例:关联中不含的表...`id` ASC LIMIT 1 select_related 会沿着递归查询,例如上图中取表 1 的实例时,会沿着将表 3 的数据一块取出来。...`id`) AS `total` FROM `orm_blog annotate 先使用 groupby 分组,然后对于每组再调用聚合函数,返回 QuerySet 对象

2.2K20

Django ORM 多表操作

目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加) 一对多( ForeignKey) 一对一 (OneToOneFeild) 多对多...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高的一方 一对多:字段建在多的一方 多对多:字段建在查询频率多的一方,在Django第三张表不需要创建...,自动创建 ps:字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及以虚拟字段的形式存在 创建模型 '''models.py''' from django.db import...添加数据(添加) 一对多( ForeignKey) 方式一: 传对象的形式,返回值的数据类型是对象,书籍对象 步骤: 获取出版社对象 给书籍的出版社属性 pulish 传出版社对象 '''test.py...口诀: 正向查询字段 反向查询表名小写 注意: 正向:属性名 反向:小写类名加 _set 反向查询的时候查询的对象可能有多个的情况加__set,查询的对象只有一个的情况不需要加 基于对象的跨表查询

1.7K20

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

分组操作 分组操作,就是将某一列,相同的值进行压缩,然后就可以得出压缩值的数量。 如果压缩的是,还可以取出外的详细信息。 示例:查询出每个出版社出版的数量。...通过研究表结构发现,每出版的书,都在book表中记录,并且每本书会一个出版社id。 ? 如果我们能对出版社id进行压缩,然后再求出压缩出版社id里面对应的数量。 啧啧,这不就出来了吗?...分组获取字段信息 上述确实可以通过分组实现了功能。 但是上述只能获取出版社id,并不能获取出版社名啥的,但是如何获取压缩字段详细信息呢?...注:分组(annotate)后面跟的values。 里面只能写字段的列和annotate里面的列,不能写其他。 如果分组分的不是字段,那就不能再跟values!...本篇主要补充的是一些高端操作,例如聚合操作,分组操作,分组再筛选操作,F查询和Q查询。 如何动态构造Q查询。 相对来说,Django还是自由度比价高的,而且写起来确实比较省心。

1.2K11
领券