如何在Django中运行SELECT DISTINCT field_name from table;
SQL查询作为raw sql
?
当我尝试使用Table.objects.raw("""SELECT DISTINCT field_name from table""")
时,我得到了一个例外
InvalidQuery:原始查询必须包含主键
如果您不需要模型实例(如果您想要单个字段则无用),您也可以使用普通的db-api游标:
from django.db import connection
cursor = connection.cursor()
cursor.execute("select distinct field from table")
for row in cursor:
print(row[0])
但是对于您的示例用例,您根本不需要SQL - orm也有values
和values_list
查询集以及distinct()
修饰符:
queryset = YourModel.objects.values_list("field", flat=True).order_by("field").distinct()
print(str(queryset.query))
# > 'SELECT DISTINCT `table`.`field` FROM `table` ORDER BY `table`.`title` ASC'
for title in queryset:
print(title)
NB:
1 /因为我们想要单个字段,所以我使用flat=True
参数来避免获得元组列表
2 /我明确地在字段上设置排序,否则最终在模型的meta中定义的默认排序可能会迫使排序字段成为te生成的查询的一部分。
看起来你必须使用一些解决方法
select field_name, max(id)
from table_name
group by field_name;