Якщо ти хоч раз стикався з базами даних, то знаєш, що для взаємодії з базою треба писати 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. Готуйтеся, буде багато цікавого!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ