关于Django中的数据库操作API之distinct去重的一个误传
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去重的一个误传相关推荐
- Django中的ORM操作之高级查询aggregate和annotate方法
Django中的ORM操作之高级查询aggregate和annotate方法 aggregate()方法详解 annotate()方法详解 aggregate和annotate应用场景 Django中 ...
- 一文详解python中的数据库操作
python中的数据库操作 一.数据库编程接口 1. 连接对象 二.使用内置的SQLite 1.创建数据库文件 2.操作SQLite 三.MySql数据库的使用 3.1 安装MySql 3.2 设置环 ...
- android中的数据库操作(SQLite)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- Django中管理并发操作
上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是 ...
- php封装的数据库操作文件夹,PHP中对数据库操作的封装_php
现在我们把其封装在dbfz.inc中,其设计如下: $#@60;? class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表mysql,当为 2 ...
- php定义数据表类,phpwind中的数据库操作类
phpwind中的数据库操作类 2021-01-22 20:12:15141 /*来源:phpwind.net*/ ClassDB{ var$query_num=0; functionDB($dbho ...
- VC++编程中的文件操作API和CFile类
VC++编程中的文件操作API和CFile类 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类.微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操 ...
- phpwind database.php,phpwind中的数据库操作类
phpwind中的数据库操作类 更新时间:2007年01月02日 00:00:00 作者: /*来源:phpwind.net*/ Class DB { var $query_num = 0; fu ...
- wp-db.php,WordPress中的数据库操作类wp-db.php
版权:转载 来源:互联网 WordPress中的数据库操作类wp-db.php的原型是ezSQL.官方网站: http://php.justinvincent.com ezSQL支持对如下数据库的操作 ...
最新文章
- R语言入门——ggplot2
- angular例子笔记
- C#中获取指定路径下指定后缀名的所有文件的路径的list
- a good way for improving my reading ability
- “毕业1年,做Python挣了50W!”网友:吹得太少..
- JavaScript Ajax
- es6 WeakMap
- js中的浅拷贝深拷贝深入理解
- 2021牛客暑期多校训练营10,签到题FH
- c语言中逻辑运算符中感叹号,某棋牌 -官网
- Java使用ODBC连接Access数据库
- 我的世界服务器修改空岛范围,我的世界空岛指令权限大全 | 手游网游页游攻略大全...
- 防关联软件技术分析之跨境电商防关联云服务器之超级VPS管理器
- ​最适合女生的10个副业(上篇),只要你有执行力,实现财富自由很简单!
- 核酸检测软件开发方案
- 传真服务器的常见问题处理
- exit()和_exit()两个函数的区别
- php 正态分布数据描述,正态分布-统计百科- 人大经济论坛-经管百科
- 量子纠缠:从量子物质态到深度学习
- 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...
热门文章
- 脚手架 - props
- 计算机英语词组,计算机专业英语词组.doc
- 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
- linux 用dg分区,[bug报告] 兼容性问题,mbr硬盘使用分区扩容后linux系统不认分区...
- java集合的遍历_Java集合之遍历
- 莫烦python博客_《莫烦Python》笔记 -- numpy部分
- python子进程kerberos_Anaconda3的python找不到kerberos凭证缓存
- linux下怎样看设备的中断号,Linux设备驱动的中断处理
- win10 联想键盘快捷键关闭_这些Win10键盘快捷键你必须掌握,系统高手必备技能...
- 唯有自己变得强大_唯有自己变得强大,才能获得有用人脉!