Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)
Posted
技术标签:
【中文标题】Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)【英文标题】:Django ORM: How to get unique records based on a column from all records(Need model object not particular value object) 【发布时间】:2016-08-11 05:08:19 【问题描述】:使用 mysql 作为后端数据库。查询数据库中的所有记录,例如:
ob = Shop.objects.all()
这里查询所有记录,因为需要所有 n 个列的值。那就来答题吧。
想要获取基于某一列的所有不重复记录。尝试使用 Python SET 函数。但它会删除完全相同的记录。我的记录在特定列值中具有相同的值,但在其他列中的值不同。
有人可以在 Django ORM 的帮助下分享一些想法吗!!!
【问题讨论】:
你的意思是你想要“不同的”值吗?... 是的。我尝试使用 distinct..但是 mysql 在 django orm 中不支持 distinct。 Select DISTINCT individual columns in django?的可能重复 我的数据库不支持 DISTINCT 函数。我无法更改任何其他数据库..Rigth 现在使用 Mysql .....知道吗??? 那个答案是针对mysql的,你可以在mysql上使用distinct
(据我所知),但只有postgres支持distinct(fields)
【参考方案1】:
如果我正确理解了您的问题,您只想检索没有重复的记录。你可以用这个查询来做到这一点:
SELECT * from shops GROUP by (duplicate_field_name) having COUNT(*) = 1
如何用 django 做到这一点?那么 GROUP by 是 Django 最糟糕的地方。但是,这可以通过原始查询来实现。
ob = Shop.objects.raw('SELECT * from shops GROUP BY
(duplicate_field_name) having COUNT(*) = 1 ORDER BY some_field')
记得将shops
和duplicate_field_name
分别替换为实际的表名和列名。
【讨论】:
我在应用 order_by 时收到此错误“RawQuerySet”对象没有属性“order_by”。我该怎么办? 你清楚地理解了Q。但现在我还没有得到答案。我可以期待任何帮助吗? 是的,您不能将 order_by() 调用与原始查询集一起使用。您可以做的是将排序添加到查询本身。正在更新答案。 我无法通过查询本身添加排序。因为我在某些上下文中需要这些记录,然后只有我可以应用排序。在我的功能中断之前 还有一件事我正在传递一个订购清单..那么我该如何继续?以上是关于Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django ORM 使用 UNION 指定 SELECT 中的列顺序
Django:显示/记录来自 python shell 的 ORM sql 调用