Ответ
Django ORM (Object-Relational Mapper) — это слой абстракции, который позволяет взаимодействовать с базой данных, используя Python-код вместо написания SQL-запросов. Он сопоставляет Python-классы (модели) с таблицами в базе данных.
Ключевые компоненты:
- Модели (
models.Model): Python-классы, описывающие структуру таблиц в БД. Атрибуты класса соответствуют столбцам таблицы. - QuerySet: Объект, представляющий собой набор записей из базы данных. QuerySet'ы являются "ленивыми" (lazy) — реальный SQL-запрос выполняется только в момент обращения к данным (например, при итерации или вызове
list()). - Менеджер (
objects): Интерфейс для выполнения запросов к таблице (Model.objects.all(),Model.objects.filter(...)). - Миграции: Система для отслеживания изменений в моделях и автоматического обновления схемы базы данных (
makemigrations,migrate).
Пример работы:
from django.db import models
# 1. Определение модели
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
is_available = models.BooleanField(default=True)
# 2. Создание объекта (генерирует INSERT SQL)
# Product.objects.create(name="Laptop", price=1200.00)
# 3. Получение данных (генерирует SELECT ... WHERE ...)
cheap_products = Product.objects.filter(price__lt=500)
# 4. Обновление данных (генерирует UPDATE ... WHERE ...)
Product.objects.filter(name="Laptop").update(is_available=False)
Преимущества:
- Продуктивность: Разработчик оперирует объектами Python, что быстрее и интуитивнее.
- Безопасность: Встроенная защита от SQL-инъекций.
- Переносимость: Код остается неизменным при смене СУБД (PostgreSQL, MySQL, SQLite).
- Оптимизация: Инструменты
select_related(дляJOIN) иprefetch_related(для отдельных запросов) позволяют сократить количество обращений к БД.