"SELECT DISTINCT field_name from table" Django 使用原始 sql

"SELECT DISTINCT field_name from table" Django using raw sql

如何 运行 SELECT DISTINCT field_name from table; SQL 在 Django 中查询 raw sql

当我尝试使用 Table.objects.raw("""SELECT DISTINCT field_name from table""") 时,出现异常

InvalidQuery: Raw query must include the primary key

看来您必须使用一些解决方法

select field_name, max(id)
from table_name
group by field_name;

如果您不需要模型实例(如果您想要单个字段,它是无用的),您也可以只使用普通的 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 也有 valuesvalues_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)

注意:

1/ 因为我们想要单个字段,所以我使用 flat=True 参数来避免获取元组列表

2/ 我在字段上明确设置了排序,否则最终在模型元数据中定义的默认排序可能会强制排序字段也成为生成查询的一部分。