Django ORM

Django ORM

Ниже приведены подсказки по работе с моделями в Django ORM и аналог запроса тех же данных с помощью чистого SQL (диалект Postgre SQL).

В текущей реализации привязки даны для Django версии 1.8 если мне известно, что в более новой версии Django это не работает или может быть упрощено, об этом будет указано в сноске *.

Модель данных, позаимстовована из официальной документации Django (opens new window) и выглядит следующим образом:

model

Описание SQL Django
Управление данными CREATE, INSERT, UPDATE, DELETE
Создать таблицу Blog
Добавить запись в таблицу Blog
Обновить запись в таблице Blog. Заменить tagline для записи с id=1
Удалить запись в таблице Blog с идентификатором id=3
Создать связь один-ко-многим. Создать статью в блоге с названием 'Cheddar Talk'
Создать связь многие-ко-многим (M2M). Joe и John - установить как авторов статьи блога.
Выполнение запросов к БД SELECT
Получить все записи таблицы Entry
Получить записи таблицы Entry с датой публикации с 05.11.2020 и заголовком Hello
Получить записи таблицы Entry исключая записи в которых дата публикции больше 05.11.2020 и заголовок Hello
Получить записи таблицы Entry исключая записи с датой публикции больше 05.11.2020 и записи с заголовком Hello
Получить записи таблицы Entry упорядоченные по дате публицкации в нисходящем порядке (от большей даты к меньшей)и по заголовку в прямом (возрастающем) порядке, для значений с 2005 годом публикации
Отсортировать значения в слючайном порядке (запрос может быть медленным и сильно нагружать БД)
Исключить в запросе дублирующиеся записи (по всем полям)
Исключить в запросе дублирующиеся записи по полям автора и даты публикции (работает только для PostgreSQL
Получить количество записей в БД отвечающему запросу
Функции агрегации
Количество статей в таблице Entry
Количество авторов статей
Посчитать количество статей соответствующих по рейтингу
Посчитать количество статей соответствующих по рейтингу, отсортировав значения по количеству статей
Получить количество статей в таблицы Entry упорядоченные по дате публицкации в нисходящем порядке (от большей даты к меньшей)и по заголовку в прямом (возрастающем) порядке, для значений с 2005 годом публикации
Получить количество статей по рейтингу и дату последней публикции
Получить количество статей сгруппированных по рейтингу и количеству комментариев
Получить количество публикций по годам
Количество статей изменененных с момента публикции
Посчитать количество статей с рейтингом ниже 3-х и более 3-х опубликованных в 2020 г.
Найти годы в которых количество публикций превысило 100 шт
Сколько уникальных имен авторов (исключая одни и те же имена) являются сотрудниками
Каков процент уникальных имен по сотрудникам/внешним пользователям
Посчитать количество статей в каждом из блогов
Посчитать для каждого пользователя в скольких статьях он является автором/соавтором
Операторы фильтрации (селекторы)
Точное совпадение
Регистронезависимое точное совпадение
Проверка на вхождение.
Регистронезависимая проверка на вхождение.
Проверка на вхождение в список значений.
Проверка на вхождение в список значений из другого QuerySet
Проверка на вхождение в список значений из другого QuerySet (оптимизированный запрос через список значений)
Проверка на вхождение в список значений через values
Значения NULL
Значения не NULL
Больше
Больше или равно
Меньше
Проверка начинается ли поле с указанного значения.
Регистронезависимая проверка начинается ли поле с указанного значения.
Проверка заканчивается ли поле указанным значением.
Регистронезависимая проверка заканчивается ли поле указанным значением.
Проверка на вхождение в диапазон (включающий).
Преобразовать в дату поле даты и времени
Проверка года для полей date/datetime
Проверка месяца для полей date/datetime
Проверка дня месяца для полей date/datetime
Проверка дня недели для полей date/datetime (1-воскресенье, 7-суббота)
Проверка часа для полей datetime (от 0 до 23)
Проверка минуты для полей datetime (от 0 до 59)
Проверка секунды для полей datetime (от 0 до 59)