"SELECT DISTINCT field_name из таблицы" Django, используя raw sql - PullRequest
0 голосов
/ 14 сентября 2018

Как я могу запустить SELECT DISTINCT field_name from table; SQL-запрос в Django как raw sql?

Когда я пытаюсь использовать Table.objects.raw("""SELECT DISTINCT field_name from table"""), я получаю исключение как

InvalidQuery: необработанный запрос должен содержать первичный ключ

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Если вам не нужны экземпляры модели (которые бесполезны, если вам нужно одно поле), вы также можете просто использовать простой курсор 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)

Примечание:

1 /, поскольку нам нужно одно поле, я использую аргумент flat=True, чтобы избежать получения списка кортежей

2 / Я явно устанавливаю порядок в поле, иначе порядок по умолчанию, определенный в метаданных модели, может заставить поле порядка также быть частью сгенерированного запроса.

0 голосов
/ 14 сентября 2018

Похоже, вы должны использовать обходной путь

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