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

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

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

1.3K11

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

一 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束...但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过 through来指定第三张表的表名。...注意事项: 表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的 对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...但是我们就不能使用ORM外键相关的方法了,所以我们单纯的将外键换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM外键方法的。...=Count('authors'))           .filter(num_authors__gt=1) #filter也是也可以是querset来调用   (5) 根据一本图书作者数量的多少对查询集

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql学习总结04 — SQL数据操作

    ,还可以通过大量数据来测试表的效率(索引) 蠕虫复制时要注意主键冲突 5....,where通过运算符进行结果比较来判断数据,注意和后面的having区分 7.5 group by 分组:根据指定的字段将数据进行分组,分组的目标是为了统计。...纵向合并,字段数不变,多个查询的记录数合并 9.1 应用场景 将同一张表中不同的结果(需要对应多条查询语句来实现),合并到一起展示数据 最常见:在数据量大的情况下对表进行分表操作,需要对每张表进行部分数据统计...连接查询 关系:一对一,一对多,多对多 将多张表连到一起进行查询(会导致记录数行和字段数列发生改变),保证数据的完整性 分类: 交叉连接 内连接 外连接:左外连接(左连接)和右外连接(右连接) 自然连接...* from 源> where > (select from 源> where ); 举例: 知道一个学生的名字,查询其班级名 通过学生表获取班级

    5.2K30

    Django ORM

    目录 Django ORM ORM实操之数据库迁移 ORM实操之字段的修改 ORM实操之数据的增删改查 数据库同步 ORM创建表关系 Django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析...无名分组和有名分组反向解析 Django ORM ORM:对象映射关系程序 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了...: 一对多、多对多、一对一,没关系暂且排外,下面演示如何通过ORM来创建外键确立表关系~ ORM创建外键字段的位置: 一对多:创建在多的一方 一堆一:创建在任何一方都可以,但是推荐创建在查询频率较高的表中...多对多(两种方式): 自己创建第三张表 创建在任何一方都可以,但是推荐创建在查询频率较高 # 创建书籍表 出版者表 作者表 # 先写表的基本结构,在考虑表关系如何写外键 # 书籍表 class...,无名对应位置参数,有名对应关键字参数 分组了,一定要记得传参数,无名分组传位置参数,有名分组传关键字参数 需要注意的是django2.0版本的变化,path和re_path写路由,django1.0版本用到的是

    4.1K10

    【Django】Django ORM 学习笔记

    QuerySet 有两种来源:通过 Manager 的方法获取、通过 QuerySet 自身的方法获得。...关联查询就是在查询当前实例的同时,把其关联的实例数据也一块取出来。在下图中 orm_blog 通过一个外键和 orm_author 关联。...关联大体上可以分为两种: 只有一个关联实例: 外键关联中包含外键的表、OneToOneField,例如下图中的 orm_blog 只与一个 orm_author 的实例关联 有多个关联实例:外键关联中不含外键的表...`id` ASC LIMIT 1 select_related 会沿着外键递归查询,例如上图中取表 1 的实例时,会沿着外键将表 3 的数据一块取出来。...annotate 默认按照 id 进行分组,如果需要按其他字段分组,要结合 values /values_list 方法。

    2.2K20

    Django——model基础

    myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   2、id 字段是自动添加的 3、对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...6、外键字段 ForeignKey 有一个 null=True 的设置(它允许外键接受空值 NULL),你可以赋给它空值 None 。...2.aggregate(*args,**kwargs):通过对QuerySet进行计算,返回一个聚合值的字典,aggregate()中每个参数都可以指定一个包含在字典中的返回值。...1 WHERE name ="yuan" OR name ="egon" 你可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。...在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如: ?

    1.1K100

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

    通过逻辑将A、B表进行连表查询,不会有任何异常。如两张表建立了一对一外键字段,外键在A表,那么先往B表写数据就更合理。...更合理) """ Django orm中外键字段属性详解 在建表之前我们对外键字段属性进行了解: 1)related_name在外键中设置外键反向查询的字段名:正向找字段名,反向找related_name...例子:部门没有了,部门员工里的部门字段改为未分组部门的id字段为NULL 注:多对多字段不能设置on_delete级联关系,如果要处理级联关系,需要手动明确关系,处理表关系中的多个外键 3)db_constraint...子序列化 Django中的子序列化的功能是:通过跨表查询数据然后对跨表查到的数据反序列化。...如果涉及到通过外键进行跨表查询,然后再将查询数据反序列化到前台就需要用到子序列化,比如下面的例子:我们查询出版社信息的时候连带将book表中的该出版社所出版过的书名一并查出来。

    4.3K30

    Django---ORM操作大全

    =publish_obj) book_obj.save() 多对多 如果两表之间存在双向1对N关系,就无法使用外键来描述其关系了; 只能使用多对多的方式,新增第三张表关系描述表...小写表名; 1对多:对象.外键.关联表字段,values(外键字段__关联表字段) 多对多:外键字段.all() 反向连表操作总结:  通过value、value_list、fifter 方式反向跨表...1对多 如果A表的1条记录对应B表中N条记录成立,两表之间就是1对多关系;在1对多关系中 A表就是主表,B表为子表,ForeignKey字段就建在子表; 如果B表的1条记录也对应A表中N条记录,两表之间就是双向...点到天荒地老 所以可以通过obj.外键.B表的列表跨表操作(注意!!...此时Django为我们提供了F和Q查询: 1、F 可以获取对象中的字段的属性(列),并对其进行操作; from django.db.models import F,Q #F 可以获取对象中的字段的属性

    6.9K100

    django 1.8 官方文档翻译: 2-2-1 执行查询

    获取对象 通过模型中的Manager构造一个QuertSet,来从你的数据库中获取对象。 QuerySet表示你数据库中取出来的一个对象的集合。...在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。...一对多关系 正向 如果一个 model 有一个 ForeignKey字段,我们只要通过使用关联 model 的名称就可以得到相关联的外键对象。...你可以设置和获得外键属性。正如你所期望的,改变外键的行为并不引发数据库操作,直到你调用 save()方法时,才会保存到数据库。...逆向关联 如果 model 有一个 ForeignKey外键字段,那么外联 model 的实例可以通过访问 Manager 来得到所有相关联的源 model 的实例。

    4.4K20

    MapReduce设计模式

    ,极大的减少通过网络传输到reducer端的key/value数量,适用的条件是你可以任意的改变值的顺序,并且可以随意的将计算进行分组,同时需要注意的是一个combiner函数只对一个map函数有作用...:简单的对指定时间段的记录数进行统计是很常见的,统计小数量级的唯一实例计数 汇总:用来执行对数据的某些字段进行汇总 二:过滤模式 1:简介 过滤模式也可以被认为是一种搜索形式,如果你对找出所有具备特定信息的记录感兴趣...,缺点是每个mapper将为每个可能输出的箱子创建文件,对后续的分析十分不利3:全排序和混排模式 全排序:关注的是数据从记录到记录的顺序,目的是能够按照指定的键进行并行排序。...,他可以在map端对许多非常大的格式化输入做连接,需要预先组织好的或者是使用特定的方式预处理过的,即在使用这个类型的连接操作之前,必须按照外键对数据集进行排序个分区,并以一种非常特殊的方式读入数据集...,此外,对应于某个特定的外链所做的所有记录必须处于同一分区中 通常情况下这发生在几个作业的输出有相同数量的reducer和相同的外键,并且输出文件是不可拆分的即不大于一个hdfs文件快的大小或是

    1.2K50

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

    然而,你有时候会想要获取从一组对象导出的值或者是聚合一组对象。这份指南描述了通过Django查询来生成和返回聚合值的方法。 整篇指南我们都将引用以下模型。这些模型用来记录多个网上书店的库存。...=Min('books__price'), max_price=Max('books__price')) 这段代码告诉 Django 获取书店模型,并连接(通过多对多关系)图书模型,然后对每本书的价格进行聚合...例如,根据一本图书作者数量的多少对查询集 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('...不是在原始的 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的...Item.objects.values("data").annotate(Count("id")) …这部分代码想通过使用它们公共的 data 值来分组 Item对象,然后在每个分组中得到 id 值的总数

    1.7K30

    如何使用 Django 更新模型字段(包括外键字段)

    每个成绩记录都关联到一个学生,通过 student 外键字段与学生表建立联系。3. 更新方法探讨在 Django 中,更新模型字段的方法有几种。...下面我们详细探讨这种更新方式:使用 attrs 方式更新外键字段在 Django 中,可以直接通过设置外键字段的方式来更新模型中的外键关联。...这种方式不需要每次都查询外键表(例如 Student 表)中的对象,而是直接使用外键的 ID 进行更新操作。...高级用法:使用 update() 方法批量更新字段除了直接设置外键字段外,还可以使用 Django 的 update() 方法来批量更新查询集中的对象。...然而,需要注意的是,update() 方法不支持直接更新外键关联的对象或外键字段。因此,在更新涉及外键字段的情况下,仍需要通过设置外键字段的方式来进行操作。

    28010

    Mysql基础

    它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。...语句 --外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update --外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对...记录时,同步update/delete掉子表的匹配记录 -----外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除-------- FOREIGN KEY (charger_id...,将子表上匹配记录的列设为null -- 要注意子表的外键列不能为not null FOREIGN KEY (charger_id) REFERENCES ClassCharger(id...方式 在mysql中同Restrict,如果子表中有匹配的记录,则不允许对父表对应候选键 -- 进行update/delete操作(了解) 多表查询 准备表 -- 准备两张表 -- company.employee

    4.2K20

    django这些查询技巧你会了吗?

    2.如果书籍表 BookInfo 中还有外键,我们还想再关联查询那张表的信息,可以用如下的方式:hbook__外键名称,外键和外键之间用双下划线连接。...如果有三层关系可以:外键名称__外键名称__外键名称,以此类推,快乐就完事儿了。 3.select_related 中还可以通过参数 depth 指定查询的深度。...4.示例中的方式是指定查询的外键,只查询了英雄类中所关联的图书。如果英雄类中有好几个外键,我们都想关联查询,参数 depth 的优势就凸显出来了,不需要详细写出每一个外键的名称。...示例中的顺序代表根据性别分组显示聚合结果,但是反过来后就变成了先根据 hgender 统计数量,最后只取字段 hgender 的值。...它是统计了数量,但只是为查询的每行记录赋予了一个新字段 number ,并没有聚合结果,不如示例中那样清晰,哪个性别有几个,展示的明明白白。

    62130

    Django之路由层

    """ 一对多外键字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ # 书跟作者是多对多的关系外键字段建在任意一方都可以...unique """ 一对一外键字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ class...、多对多的表关系外键建立在任意一方都可以,建议建在查询频率高的一方 一对多外键字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id...多对多关系,django orm会自动帮我们创建书籍和作者的第三张关系表 #外键的建立 publish = models.ForeignKey(to='Publish') author = models.ManyToManyField...3.9Django1.x和2.x的版本的路由层区别 1.Django2.x中默认的url通过path接收,path的第一个输入值不是正则表达式,里面写的是什么就按什么匹配。

    1.4K21

    个人永久性免费-Excel催化剂功能第65波-数据区域转换指定规格的多行或多列

    功能实现 为了穷举所有的场景,对其进行了四个功能的拆分,分别对应于各按钮,可按需选择最终要的效果所对应的按钮一键即可生成。...查找先行/先列:因原单元格区域有可能选择的是多行多列的区域,在转换结构过程中,从源单元格区域查找时是先按行来查找还是按列来查找,和查找替换功能的原理一样。...第2步:按所需转换后的样式和查找源区域的方式,选择对应按钮 点击按钮后,仍然有几个步骤需要确认,如分组的组内记录数量是多少一组,或需要分几个组,还有转换后的区域存放在哪个目标单元格中(左上角位置) 最终各按钮操作后的效果如下...: 按组内数量为5确认 按分组数量为5确认 结语 对有规律的事情,尽量让电脑来完成,这是Excel催化剂一直以来所提倡的,至于这个规律的总结,是没有太强技术背景的业务导向的人员需要去操练掌握的,其实此功能也是一网友提出的...若想更轻松地掌握Excel催化剂的功能,可通过视频的方式来掌握,操作类的知识没有比一个视频演示更有说服力的了,视频地址可私信获取。

    56440

    Django 模型层之多表操作

    Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于外键字段,Django会在字段名上添加..."_id"来创建数据库中的列名 3.外键字段ForeignKey有一个null=True的设置,你可以赋给它空值None 二.添加表记录 一对一: # 方式一: detail_obj = models.AuthorDetail.objects.filter...,都是将模型字段与常量进行比较,但是,如果想将模型的一个字段与同一个模型的另一个字段进行比较该怎么办?...所有Django为我们提供了F表达式来完成这类操作 导入包: from django.db.models import F 如:查询comment_num数量大于read_num的书籍 models.Book.objects.filter...如:将read_num的数量乘以二 models.Book.objects.all().update(read_num=F('read_num')*2) Q查询 filter()等方法种的关键字参数查询都是通过逗号来实现

    1.3K20

    Django ORM 多表操作(二)

    目录 Django ORM 多表操作(二) 多对多操作常用API 分组查询 单表分组查询示例 多表分组查询练习 查询练习 ORM 事务 ORM 常见字段和参数 ORM常见字段 ORM 常见参数 choices...参数 多对多关联关系的三种方式 方式一:自己创建第三张表 方式二:通过ManyToManyFeild自动创建第三张表 方式三:设置ManyTomanyField并指定自行创建的第三张表 元信息 原生sql...Author(models.Model): name = models.CharField(max_length=32, verbose_name="作者姓名") # 自己创建第三张表,分别通过外键关联书和作者...("author", "book")) # through_fields接受一个2元组('field1','field2'): # 其中field1是定义ManyToManyField的模型外键的名...但是当我们使用第三种方式创建多对多关联关系时,就无法使用set、add、remove、clear方法来管理多对多的关系了,需要通过第三张表的model来管理多对多关系。

    1.1K20
    领券