Django ORM: общий обзор и работа с базой данных
Проясняем что такое и как работает Django ORM. Разбираем преимущества, недостатки и поддержку баз данных.


Работа с базами данных является неотъемлемой частью разработки веб-приложений.
В современном мире люди привыкли к комфорту и ожидают удобное управление даже данными.
В этой вступительной статье посмотрим что нам предлагает Django ORM.
Прежде мы рассмотрели что такое Django, а ORM это его компонент и расшифровывается как Object-Relational Mapping, то есть «объектно-реляционная связь».
ORM связывает объекты приложения с данными, хранящимися в таблицах баз данных, после чего позволяет выполнять операции используя не SQL синтаксис, а язык python.
Простыми словами, Django ORM позволяет обращаться к базе данных не зная SQL.
Без Django ORM python разработчику пришлось бы самостоятельно каждый раз писать муторный и однотипный код или создать альтернативу многократно протестированному Django ORM, для таких задач как:
Получение данных
Выбирать строки таблицы по заданным условиям
Создание и изменение данных
Добавлять новые записи и изменять существующие
Удаление данных
Удалять строки из базы данных
Работа со связями
Получать связанные объекты и вручную писать JOIN для каждого запроса
Django ORM работает как посредник между Python-приложением и базой данных.
В списке ниже описана подробная логика работы ORM:
Описание моделей
Разработчик описывает структуру данных будущей таблицы в виде модели
Синхронизация моделей с базой данных
С помощью миграций Django приводит таблицы в базе данных в соответствии с моделями
Формирование запросов
При запросе, например: получи все строки таблицы, Django ORM преобразует операции Python в SQL-запросы
Выполнение SQL-запроса
База данных (СУБД) выполняет SQL-запрос и возвращает результат
Преобразование результата
Django ORM преобразует полученные данные в объекты Python, с которыми приложение может работать

Django ORM для преобразования Python в SQL использует специальные методы и механизмы, которые анализируют запрос, формируют соответствующую SQL-команду и передают её базе данных для выполнения.
Для лучшего понимания ниже 2 примера при помощи Django ORM и SQL.
Product.objects.filter(price__gt=100)пример django ORM получает продукты по цене дороже 100
SELECT *
FROM product
WHERE price > 100;пример SQL получает продукты по цене дороже 100
Django ORM поддерживает несколько реляционных систем управления базами данных. К основным относятся:
PostgreSQL
SQLite
MySQL/MariaDB
Хоть и в зависимости от типа базы данных сам SQL код может отличаться, в большинстве случаев для разработчика Django это не имеет значения, ведь ORM делает всю грязную работу.
Некоторые типы баз данных имеют отличия, а иные слабую совместимость с Python, например: Microsoft Access, Microsoft SQL Server (MSSQL) и периодически потребуется писать запросы на сыром SQL.
К основным преимуществам Django ORM относятся:
Интеграция с Django - ускоряет разработку
ORM автоматически взаимодействует с моделями, формами, административной панелью и другими компонентами фреймворка django
Один язык для работы с данными
Большинство операций можно описывать на питоне
Поддержка разных СУБД
Django ORM позволяет менять безшовно базу данных между PostgreSQL, MySQL, SQLite и Oracle, используя тот же код для многих операций с данными
Безопасная параметризация запросов
Стандартные ORM-операции помогают избежать SQL-инъекций при правильном использовании
Поддержка транзакций
Django позволяет объединять операции с базой данных в транзакции (несколько действий в 1 применение) и отменять их в случае неудачи
Инструменты для оптимизации
Django ORM поддерживает выборочную загрузку данных, массовые операции, предварительную загрузку связанных объектов и другие средства управления запросами
Недостатки у Django ORM тоже имеются, но проявляются в основном в неумелых руках или на слишком больших проектах.
Ограничения при сложных запросах
Некоторые сложные SQL-запросы, аналитические выборки и специфические операции базы данных проще реализовать на чистом SQL
Снижение производительности при неправильном использовании
Необдуманные ORM-запросы могут приводить к лишним обращениям к базе данных (загружая ненужное), проблеме N+1 и увеличению времени выполнения операций
Необходимость понимать SQL
Для решения проблем производительности в крупных проектах все же требуется понимание SQL
Дополнительные накладные расходы
Создание Python-объектов и обработка результатов ORM могут увеличивать потребление памяти и время выполнения операций при работе с большими объёмами данных
В этой статье мы рассмотрели что такое Django ORM, если у вас остались вопросы вы можете написать программисту.
По необходимости вы можете обратиться за консультацией
Вам может быть интересно

Переменные окружения и секретные ключи в Python

Как открыть XML-файл и посмотреть его в читаемом виде

Как работать с XML: редактировать и проверить

Миграции в django: makemigrations, migrate и схема БД

Почему Django показывает желтый фон и какие-то ошибки
