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) | | |