具体错误提示是:django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend

刚好遇到mysql数据库查重,使用distinct方法来做去重查询,结果遇到这个错误。先看一下distinct的源码:

 def distinct(self, *field_names):
"""
Return a new QuerySet instance that will select only distinct results.
"""
assert self.query.can_filter(), \
"Cannot create distinct fields once a slice has been taken."
obj = self._chain()
obj.query.add_distinct_fields(*field_names)
return obj

使用distinct会返回一个新的查询集合,会显示不重复的结果,达到去重的目的。我们可以看到它接受的是一个或多个field_names参数,也就是各字段名称。

我写的错误写法:u.objects.all().distinct('address')。

这是报的错误。。。根据提示说明distinct不支持当前的数据库。

我们可以去官网看一下这个字段的说明:https://docs.djangoproject.com/en/2.2/ref/models/querysets/#distinct

官网提到了上面这种错误的写法,在mysql中是不支持的,支持postgresql,也就是distinct()里面不能指定字段。

错误解决

不能这样,那我们可以把数据写到values或者values_list里面去不就好了。

查询语句如下:

u.objects.filter(user_id=1).values('address', "signer_name", 'signer_mobile').distinct()

输出结果如下:

<QuerySet [{'address': '188号蓝天国际大厦', 'signer_name': 'admin', 'signer_mobile': ''}, {'address': '中原路188号', 'signer_name': '牛', 'signer_mobile': ''}, {'address': '南关街14号', 'signer_name': '刘雨辰', 'signer_mobile': ''}, {'address': '麓山南路麓山门', 'signer_name': '湖南大学', 'signer_mobile': ''}, {'address': '安徽省合肥市金寨路 96 号', 'signer_name': '中国科学技术大学', 'signer_mobile': ''}]>

对应于SQL语句:

 SELECT DISTINCT address, signer_name, signer_mobile FROM user_operation_useraddress WHERE user_id=1;    // 去重查询语句

 SELECT COUNT(*) as repetitions, address, signer_name, signer_mobile FROM user_operation_useraddress GROUP BY address, signer_name, signer_mobile;    // 去重查询以及字段数量统计

 SELECT COUNT(*) as repetitions, address, signer_name, signer_mobile FROM user_operation_useraddress GROUP BY address, signer_name, signer_mobile HAVING repetitions > 1;    // 去重查询,字段记录数量统计大于1条的

以上就是mysql环境下,django的去重查询方式。

Django使用distinct报错:DISTINCT ON fields is not supported by this database backend的更多相关文章

  1. django startproject xxx:报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 13: ordinal not in range(128)

    django startproject xxx:报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 13: o ...

  2. Django迁移数据库报错

    Django迁移数据库报错 table "xxx" already exists错误 django在migrate时报错django migrate error: table 'x ...

  3. django正常运行确报错的解决方法

    django正常运行却报错的处理方法 出处 : https://www.infvie.com/ops-notes/django-normal-operation-error 报错一:self._soc ...

  4. AS报错:lambda expressions are not supported at this language level

    AS报错:lambda expressions are not supported at this language level 解决方法 打开打开 File --> Project Stuct ...

  5. mycat 1.6.6.1 distinct报错问题

    以前在mysql5.7上执行如下sql语句没有问题 SELECT DISTINCT u.*,c.content userCategory FROM m_user u LEFT JOIN m_categ ...

  6. Django:django-cors-headers 报错no module named "corsheaders"

    django跨域使用 pip install django-cors-headers 然后在settings文件中加上参数设置 # app配置 INSTALLED_APPS = [ 'django.c ...

  7. django调用py报错 django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured.

    完整报错信息如下 django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, bu ...

  8. django 连接mysql报错

    原因: 问题1. 即从mysql5.7版本之后,默认采用了caching_sha2_password验证方式. 问题2.  然后在执行 python manage.py makemigrations依 ...

  9. Django创建App报错

    在django下创建APP项目时遇到的坑 python manage.py startapp app01 报错内容如下: 解决:找到报错中的文件夹151行删除items(),)中的逗号即可 在命令行下 ...

随机推荐

  1. 【数论】[因数个数]P4167樱花

    题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...

  2. 选择排序之python实现

    def findsmallestindex(arr): smallnum = arr[0] smallindex = 0 # 寻找最小元素的位置 for i in range(1,len(arr)): ...

  3. python实现余弦相似度文本比较

    向量空间模型VSM: VSM的介绍: 一个文档可以由文档中的一系列关键词组成,而VSM则是用这些关键词的向量组成一篇文档,其中的每个分量代表词项在文档中的相对重要性. VSM的例子: 比如说,一个文档 ...

  4. NOI2019 Day1游记

    Day1挂了,没什么好说的... 开场T1想到70分暴力就走人了,后来发现可以写到85...(听说有人写dfs过了95?233333) T2刚了2个多小时,得到每次只在中间填最大值的结论后不会区间DP ...

  5. kkk

    #!/usr/bin/env python3# coding=utf-8# Author: yannanxiu"""create_rsa_key() - 创建RSA密钥m ...

  6. python: str()

    tx1 = '中国' tx2 = u'中国' print tx1 print tx2 print type(tx1) print type(tx2) #<type 'str'> str() ...

  7. css选择指定元素

    .butSpan:){ margin-left: 10px; } nth-child(n+2)括号内可以是公式 可是是数字

  8. 【Beta】Scrum meeting 6 & 助教参会记录

    github 本此会议项目由PM召开,召开时间为5月13日晚上10点 召开时长15分钟 任务表格 姓名 当前任务 下阶段任务 袁勤 初步实现后端题库功能 优化后端 彭一夫 向数据库导入新题 查看评论功 ...

  9. DNS基本操作详解

    在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态 ...

  10. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...