django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重。django里的这个distinct()函数也是这个功能,通常的用法是我们要取出一张表中的某一列的所有值,并且只取出不重复的,如果有重复的就只取出来一次,网络上几乎所有的对这个函数的使用例子对应的Python代码都如下:

但是这样的用法往往达不到使用者的意图,可以来看一下网络上流传甚广的一个问答:
比如这个:http://bbs.csdn.net/topics/330006477
再比如这个:http://www.douban.com/group/topic/17856879/
这里其实说的都是一个例子,仔细看这个解答

—–
需要注意的是,这样返回的是一个字典的列表,而不是通常的 QuerySet

这样是过滤不掉的,这是个问题,还是有5个对象在里面,对结果使用len(obj)就知道没有任何变化,但是如果只作统计不重复数据的个数的话,还是准确的3个
obj=ClassName.objects.values(‘name’).distinct()
len(obj)=5
obj.count()=3
但是结果集中没有起到任何的过滤作用,此问题有待解决!!!!!

有理有据,让人很信服的认为distinct()函数没有实现其所描述的功能。真的是这样么?

在这里负责的告诉读者,上面的解释是错误的,distinct()具有去重功能是没有必要怀疑的,那为什么会出现上面的解释呢?因为他不知道distinct()函数有一个隐藏特性,当使用distinct()函数的时候,如果不使用order_by()函数做跟随,那么该函数会自动把当前表中的默认排序字段作为DISTINCT的一个列,所以上述问题出现的原因是因为他没有使用order_by(‘name’)来屏蔽distinct()的那个特性,从而得出的distinct结果并不是仅仅以name一个列作为参数的,而是以id+name两列的值作为distinct参数,可以看到id列里面的值全部都是唯一值,所以得出来的结果必然是以id列的值为标准的,这也就是的原因,而如果想要实现上述例子中楼主的需求,正确的代码写法是:

Python

1

ClassName.objects.values('name').distinct() .order_by('name')

在1.4+版本的django中distinct()函数可以传入一个参数,从而省去了后面跟加一个order_by()函数的必要,但是这也需要你的数据库支持Postgresql,否则还是无效的。

访问具体数据:

因为此处查询到的i类型为dict类型。c是QuerySet类型

转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml

关于Django中的数据库操作API之distinct去重的一个误传相关推荐

  1. Django中的ORM操作之高级查询aggregate和annotate方法

    Django中的ORM操作之高级查询aggregate和annotate方法 aggregate()方法详解 annotate()方法详解 aggregate和annotate应用场景 Django中 ...

  2. 一文详解python中的数据库操作

    python中的数据库操作 一.数据库编程接口 1. 连接对象 二.使用内置的SQLite 1.创建数据库文件 2.操作SQLite 三.MySql数据库的使用 3.1 安装MySql 3.2 设置环 ...

  3. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  4. Django中管理并发操作

    上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是 ...

  5. php封装的数据库操作文件夹,PHP中对数据库操作的封装_php

    现在我们把其封装在dbfz.inc中,其设计如下: $#@60;? class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表mysql,当为 2 ...

  6. php定义数据表类,phpwind中的数据库操作类

    phpwind中的数据库操作类 2021-01-22 20:12:15141 /*来源:phpwind.net*/ ClassDB{ var$query_num=0; functionDB($dbho ...

  7. VC++编程中的文件操作API和CFile类

    VC++编程中的文件操作API和CFile类 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类.微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操 ...

  8. phpwind database.php,phpwind中的数据库操作类

    phpwind中的数据库操作类 更新时间:2007年01月02日 00:00:00   作者: /*来源:phpwind.net*/ Class DB { var $query_num = 0; fu ...

  9. wp-db.php,WordPress中的数据库操作类wp-db.php

    版权:转载 来源:互联网 WordPress中的数据库操作类wp-db.php的原型是ezSQL.官方网站: http://php.justinvincent.com ezSQL支持对如下数据库的操作 ...

最新文章

  1. R语言入门——ggplot2
  2. angular例子笔记
  3. C#中获取指定路径下指定后缀名的所有文件的路径的list
  4. a good way for improving my reading ability
  5. “毕业1年,做Python挣了50W!”网友:吹得太少..
  6. JavaScript Ajax
  7. es6 WeakMap
  8. js中的浅拷贝深拷贝深入理解
  9. 2021牛客暑期多校训练营10,签到题FH
  10. c语言中逻辑运算符中感叹号,某棋牌 -官网
  11. Java使用ODBC连接Access数据库
  12. 我的世界服务器修改空岛范围,我的世界空岛指令权限大全 | 手游网游页游攻略大全...
  13. 防关联软件技术分析之跨境电商防关联云服务器之超级VPS管理器
  14. ​最适合女生的10个副业(上篇),只要你有执行力,实现财富自由很简单!
  15. 核酸检测软件开发方案
  16. 传真服务器的常见问题处理
  17. exit()和_exit()两个函数的区别
  18. php 正态分布数据描述,正态分布-统计百科- 人大经济论坛-经管百科
  19. 量子纠缠:从量子物质态到深度学习
  20. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...

热门文章

  1. 脚手架 - props
  2. 计算机英语词组,计算机专业英语词组.doc
  3. 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
  4. linux 用dg分区,[bug报告] 兼容性问题,mbr硬盘使用分区扩容后linux系统不认分区...
  5. java集合的遍历_Java集合之遍历
  6. 莫烦python博客_《莫烦Python》笔记 -- numpy部分
  7. python子进程kerberos_Anaconda3的python找不到kerberos凭证缓存
  8. linux下怎样看设备的中断号,Linux设备驱动的中断处理
  9. win10 联想键盘快捷键关闭_这些Win10键盘快捷键你必须掌握,系统高手必备技能...
  10. 唯有自己变得强大_唯有自己变得强大,才能获得有用人脉!