Если вы хоть раз сталкивались с базами данных, то знаете, что для взаимодействия с базой нужно писать SQL-запросы. Например, чтобы извлечь список товаров из таблицы базы данных, вы бы написали примерно такой запрос:
SELECT * FROM products WHERE price > 100;
Это работает, но через какое-то время у вас начинает рябить в глазах от SQL-кода. К тому же SQL-запросы нужно вручную адаптировать под разные базы данных (PostgreSQL, MySQL, SQLite и т.д.). А если вы вдруг ошиблись в запросе, база данных может вернуться с загадочным сообщением в духе "ERROR 1064", а вы останетесь в недоумении.
И тут на помощь приходит ORM! Object-Relational Mapping (Объектно-реляционное отображение) — это способ взаимодействия между вашим приложением и базой данных через код без необходимости писать SQL-запросы вручную.
Итак, почему ORM — это круто?
Абстракция базы данных
ORM позволяет работать с базой данных, как с обычными объектами Python. Вы описываете структуру ваших данных в виде классов, а ORM берет на себя все остальное: создание таблиц, выполнение запросов, внесение изменений и т.д.Код становится чище
Вместо длинных SQL-запросов вы пишете компактные и удобные методы. Например, вместо SQL-запроса:SELECT * FROM products WHERE price > 100;Вы можете написать Python-код:
Product.objects.filter(price__gt=100)Повышение продуктивности
ORM берет на себя большую часть рутины, позволяя вам сконцентрироваться на бизнес-логике приложения, а не на низкоуровневых деталях взаимодействия с базой данных.Портируемость между базами данных
С ORM ваш код становится независимым от конкретной базы данных. Хотите поменять SQLite на PostgreSQL? Без проблем! Просто измените настройки проекта, и Django ORM сделает остальное.
Django ORM: краткий обзор
Django поставляется с мощной встроенной системой ORM. Она позволяет вам:
- Создавать таблицы базы данных с использованием Python-классов.
- Выполнять CRUD-операции (создание, чтение, обновление и удаление данных) без написания SQL-запросов.
- Работать с фильтрацией, сортировкой, агрегированием данных и многим другим.
Когда вы используете Django ORM, каждый класс, который вы определяете как модель, соответствует одной таблице в базе данных. Поля класса — это колонки таблицы. А экземпляры этого класса — это строки таблицы. Вот такая хитрая и удобная магия.
Вот, например, класс модели:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField()
Этот код создаст таблицу в базе данных, соответствующую модели Product, с колонками name, price и description.
Как работает ORM: объяснение на пальцах
В который раз представьте себе ресторан. У вас есть кухонный персонал (Django ORM), который готовит блюда (SQL-запросы), а вы — официант (разработчик), который просто подает заказы и общается с клиентами. Вам не нужно вникать, как шеф-повар готовит пасту карбонара — достаточно сказать, что вы хотите пасту. Аналогично с ORM: вы говорите, что хотите получить список продуктов дороже 100, а ORM сама разберется с SQL-запросом.
Пример использования Django ORM
Создание объекта
Создадим новый продукт:
product = Product(name="Лампа", price=500.99, description="Настольная лампа с LED-подсветкой") product.save()Здесь мы создали объект
Productи сохранили его в базе данных методомsave().Чтение данных
Извлечем все продукты из таблицы:
products = Product.objects.all()Этот код вернет список всех объектов из таблицы
Product.Фильтрация данных
Извлечем только те продукты, цена которых больше 100:
expensive_products = Product.objects.filter(price__gt=100)Этот метод возвращает отфильтрованный список объектов.
Обновление записи
Изменим цену у продукта:
lamp = Product.objects.get(name="Лампа") lamp.price = 450.49 lamp.save()Удаление записи
Удалим продукт из базы:
lamp = Product.objects.get(name="Лампа") lamp.delete()
Преимущества Django ORM: снова подытожим
- Скорость и удобство: ORM позволяет работать с базами данных, используя привычный Python. Вам не нужно учить синтаксис SQL или переживать за корректность запросов.
- Меньше ошибок: ORM генерирует оптимизированный SQL-код, который чаще всего не страдает от типичных ошибок ручного написания SQL.
- Управление миграциями: ORM автоматически создает и применяет изменения в структуре базы данных, что упрощает разработку.
Краткий словарь терминов
Прежде чем мы продолжим наше путешествие по Django ORM, вот краткий список новых терминов, которые вы должны знать:
- Модель (Model): класс в Python, который описывает структуру данных. Каждая модель соответствует одной таблице в базе данных.
- Поле (Field): переменная внутри модели, которая описывает одну колонку таблицы.
- Объект QuerySet: набор данных, который вы получаете, применяя запросы к модели (например,
filter,allи т.д.). - Миграция: способ внесения изменений в структуру базы данных (таблицы, колонки и т.д.).
А что дальше?
Теперь, когда вы поняли, зачем нужен ORM и как он работает, мы перейдем к практике. В следующей лекции мы создадим первую модель в вашем Django-приложении. Затем добавим в нее поля, настроим атрибуты и научимся управлять этой моделью через ORM. Готовьтесь, будет много интересного!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ