用于获取多个值的 Django MySQL 不同查询

Posted

技术标签:

【中文标题】用于获取多个值的 Django MySQL 不同查询【英文标题】:Django MySQL distinct query for getting multiple values 【发布时间】:2012-09-06 08:15:15 【问题描述】:

不幸的是,我有一个 MySQL 数据库与 Django 1.4.1 一起使用。 如果我做对了,不同的功能仅适用于 POSTGRESQL。

我必须让一个不同的查询由多个值组成,而只有一个不同的值,

喜欢; 这个适用于 POSTGRE 但不适用于 mysql, 我收到以下错误;

此数据库后端不支持 DISTINCT ON 字段

staff = Staff.objects.order_by('person__full_name').distinct('person__full_name')

然后我尝试了

staff = Staff.objects.values('person__full_name','staff_job_categories').distinct().order_by('person__full_name')

但我没有得到不同的价值观,因为我也得到了员工工作类别。但是当我不包含它时,我无法将它作为数组获取。

有什么想法吗?

【问题讨论】:

【参考方案1】:

.distinct([*fields]) 仅适用于 PostgresSQL。

来自distinct 文档

这就是区别。对于普通的 distinct() 调用,数据库在确定哪些行是不同的时比较每一行中的每个字段。对于具有指定字段名称的 distinct() 调用,数据库将仅比较指定的字段名称。

如上所述,检查记录中的所有字段。在您的情况下,您很可能会获得具有不同字段值的记录(如果您要查询多个表的 ManyToMany 或 ForeignKey 关系,则更有可能是这种情况)。

要合并为数组,您可以参考您之前的问题Django Query distinct values works but i cant use the query result

【讨论】:

【参考方案2】:
names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct()

会给你不同的全名,你可以做类似的事情来获得不同的工作类别。

这些将为您提供值列表,而不是对象本身,但如果我正确解释您的问题,那么我认为这些将为您提供您想要的。

【讨论】:

【参考方案3】:

并非所有数据库都支持 Distinct('field name')。所以我们能做的就是使用非常简单的解题技巧

 class vendor_ready_distinct(APIView):
        def get(self, request):
            obj_readyproduct = vendor_list_readyProduct.objects.all().order_by('mobile_number')

            unique_list = []
            list = []
            for x in obj_readyproduct:
                # check if exists in unique_list or not
                if x.mobile_number not in list:
                    unique_list.append(x)
                    list.append(x.mobile_number)
    
            seri_obj = vendor_list_readyProductSerializer(unique_list, many=True)
            return Response(seri_obj.data)

这里我们使用geeksforgeeks中的方法1来获取不同的行

【讨论】:

【参考方案4】:

如果您想将 DISTINCT 与 WHERE 语句一起使用,您可以使用此代码。

staff = Staff.objects.filter(person__full_name="Alex").values('staff_job_categories').distinct().order_by('person__full_name')

【讨论】:

以上是关于用于获取多个值的 Django MySQL 不同查询的主要内容,如果未能解决你的问题,请参考以下文章

Django Annotate - 获取不同字段值的列表

Django Query 获取 ArrayField 列的所有不同值的计数

Django Query以获取特定列的所有不同值的计数[重复]

django-mysql表的增删改查

django基础知识之QueryDict对象:

django 获取 POST 请求值的几种方法