Django ORM
Ниже приведены подсказки по работе с моделями в Django ORM и аналог запроса тех же данных с помощью чистого SQL (диалект Postgre SQL).
В текущей реализации привязки даны для Django версии 1.8 если мне известно, что в более новой версии Django это не работает или может быть упрощено, об этом будет указано в сноске
*
.
Модель данных, позаимстовована из официальной документации Django (opens new window) и выглядит следующим образом:
Описание | 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) |
|
|