Глава 22 · Веб-разработка с Python

ORM: работа с базой данных через объекты Python

Строки таблицы как объекты Python — удобно, но ORM всё равно формирует и выполняет обычный SQL.

Раздел 22.22 писал SQL-запросы текстом. ORM (Object-Relational Mapper — объектно-реляционное отображение) — это библиотека, которая позволяет работать со строками таблицы как с обычными объектами Python, а не собирать SQL-текст вручную. У разных ORM разный API — вот один и тот же запрос и одна и та же вставка в двух самых заметных ORM экосистемы Python:

ДействиеSQL напрямуюDjango ORMSQLAlchemy 2.x
Прочитать невыполненные задачиSELECT id, title FROM tasks WHERE done = 0Task.objects.filter(done=False)select(Task).where(Task.done.is_(False))
Добавить новую задачуINSERT INTO tasks (title) VALUES (?)Task.objects.create(title="Купить хлеб")session.add(Task(title="Купить хлеб"))

SQLAlchemy (описывает себя как «инструментарий SQL и объектно-реляционный преобразователь для Python») используется вместе с разными фреймворками, включая Flask, и распространяется отдельным пакетом. Встроенный ORM Django поставляется вместе с самим фреймворком и тесно с ним интегрирован — это разные библиотеки с разным API, а не два имени одного и того же инструмента.

ORM не отменяет необходимость понимать SQL
ORM удобно избавляет от рутины — не нужно вручную собирать текст запроса для каждой операции. Но он не убирает саму реляционную модель: ORM всё равно формирует и выполняет SQL-запросы на основе операций с объектами, и понимание того, как устроены таблицы, связи и запросы (разделы 22.21-22.22), напрямую влияет на то, насколько эффективно и правильно вы используете ORM — особенно когда запрос через ORM работает не так быстро, как ожидалось, и нужно понять, какой именно SQL он выполнил.

Почему в итоговом проекте используется sqlite3

Для проекта этой главы (раздел 22.29) выбран прямой модуль sqlite3, а не ORM: цель этой главы — понять, что именно происходит с данными на каждом шаге, а не спрятать это за слоем абстракции ещё до того, как эта абстракция станет понятна. ORM — полезный и распространённый инструмент для реальных проектов, но здесь он отвлёк бы от самой идеи главы.

Практика: SQL и его отображение в ORM
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →