美文网首页js css html
[Django] order_by 的副作用

[Django] order_by 的副作用

作者: alue | 来源:发表于2022-05-30 14:25 被阅读0次

Django ORM 使用 order_by 语句实现查询的排序,但它有些副作用,需要清楚的理解,否则就会出现莫名其妙的问题。

例如,有时候出现用 distinct() 过滤重复的行时,会发现返回结果仍然有重复的。如果在查询语句上级联 order_by(),就能够去除重复。

这个现象就是order_by()的副作用 —— 任何order_by()中的字段,都会放在SQL SELECT的列中。这就导致了原本是重复的行,加上order_by()中的字段之后,就变得不重复了。

举一个列子,我们在model中增加排序字段 -id.

class Leave(models.Model):
    class Meta:
        verbose_name = "请假单"
        ordering = ['-id']
    student = models.CharField('申报人', max_length=4)
    days = models.PositiveSmallIntegerField(verbose_name='天数', default=0)

如果我们想用 Leave.objects.distict('student'),就会发现该student的所有行都被返回了,这是因为,实际上这里执行的是二元组 ('id','student') 的重复检测,这里所有行的二元组都是唯一的。

同样的道理,如果我们用聚合函数

Leave.objects.values('student').annotate(Sum('days'))

会发现,并不能求出每个学生的请假天数,只有加上 .order_by(), 让排序字段为空之后,才能得到想要的结果。这个原因跟之前是一致的。

Leave.objects.values('student').annotate(Sum('days')).order_by()

相关文章

  • [Django] order_by 的副作用

    Django ORM 使用 order_by 语句实现查询的排序,但它有些副作用,需要清楚的理解,否则就会出现莫名...

  • Django models结果排序 2020-05-09

    用order_by('-id')表示按照id倒序 https://www.cnblogs.com/wangying...

  • Oracle sql

    1.基本操作 order_by排序:列名,升序还是降序,null排在开头还是结尾 In DISTINCT使修饰的字...

  • Django 索引

    应该索引的字段 1.需要排序操作的字段 (order_by) 2.需要比较操作的字段 (> < >=, <=) 3...

  • django 自定义排序

    今天遇到个自定义排序场景 按 status 不规则排序平时只用到 order_by("status") 或 ord...

  • 对查询集排序和查询集的字段查找条件输入

    对查询到的结果排序 方式1:使用order_by方法 根据模型本身的字段排序 若要随机排序,请使用"?",像这样:...

  • 2018-11-20

    美版超声刀有副作用吗?关于超声刀副作用的套路 美版超声刀有副作用吗?关于超声刀副作用的套路。最近老有身边...

  • 2018-12-06

    美版超声刀有副作用吗?关于超声刀的副作用套路 美版超声刀有副作用吗?关于超声刀的副作用套路。最近老有身边的朋友问我...

  • About Django

    Django: 安装Django pip3 install django 创建Django工程 运行Django功...

  • useEffect

    1. 理解函数副作用 本节任务: 能够理解副作用的概念 什么是副作用 副作用是相对于主作用来说的,一个函数除了主作...

网友评论

    本文标题:[Django] order_by 的副作用

    本文链接:https://www.haomeiwen.com/subject/ipyoprtx.html