Kravchenko

Web Lab

АудитБлогКонтакты

Kravchenko

Web Lab

Разрабатываем сайты и автоматизацию на современных фреймворках под ключ

Услуги
ЛендингМногостраничныйВизитка
E-commerceБронированиеПортфолио
Навигация
БлогКонтактыАудит
Обратная связь
+7 921 567-11-16
info@kravlab.ru
с 09:00 до 18:00

© 2026 Все права защищены

•

ИП Кравченко Никита Владимирович

•

ОГРНИП: 324784700339743

Политика конфиденциальности

Django ORM: как работать с базами данных без лишнего SQL

Разработка и технологии26 сентября 2025 г.
В статье разбираем, что такое Django ORM, зачем он нужен и как с его помощью работать с базами данных проще и быстрее. Покажем базовые примеры моделей и запросов, а также ситуации, когда без «чистого SQL» всё же не обойтись
Django ORM: как работать с базами данных без лишнего SQL

Django ORM: мощный инструмент работы с базами данных

Django ORM позволяет работать с базой данных через Python-объекты, а не вручную писать SQL-запросы. Это ускоряет разработку, делает код чище и обеспечивает быструю и безопасную работу с данными.


Что такое ORM?

ORM (Object-Relational Mapping) — это технология отображения объектов языка программирования на таблицы реляционных баз данных.
С ORM разработчик работает не напрямую с SQL-запросами, а с Python‑объектами, которые «превращаются» в SQL под капотом.

В Django встроен собственный ORM, который позволяет:

  • Описывать структуру базы данных через Python‑классы (модели).
  • Автоматически создавать и изменять таблицы (миграции).
  • Писать запросы к базе с помощью удобного API.
  • Работать с разными СУБД (PostgreSQL, MySQL, SQLite и др.) без изменения кода.

Преимущества Django ORM

  1. Минимум SQL — можно писать почти весь код на Python.
  2. Кросс‑база — легко менять движок (например, SQLite → PostgreSQL).
  3. Чистый и читаемый код.
  4. Интеграция с экосистемой Django: админка, формы, сериализация, валидация.
  5. Безопасность — защита от SQL‑инъекций по умолчанию.

Пример модели

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.name


class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_at = models.DateField()
    is_available = models.BooleanField(default=True)

    def __str__(self):
        return self.title

Здесь мы определили 2 модели — Author и Book. Django автоматически создаст для них таблицы в базе данных.


Основные операции с ORM

Создание записи

author = Author.objects.create(name="Достоевский")
Book.objects.create(title="Преступление и наказание", author=author, published_at="1866-01-01")

Получение записей

books = Book.objects.all()              # все книги
book = Book.objects.get(id=1)           # книга по id
filtered = Book.objects.filter(is_available=True)  # только доступные

Обновление записи

book = Book.objects.get(id=1)
book.title = "Преступление и наказание (ред.)"
book.save()

Удаление записи

book = Book.objects.get(id=1)
book.delete()

Сложные запросы

Django ORM поддерживает агрегаты, аннотации и связи.

from django.db.models import Count

# Количество книг у каждого автора
authors = Author.objects.annotate(book_count=Count("book"))
for a in authors:
    print(a.name, a.book_count)

Когда использовать «чистый SQL»?

Хотя ORM покрывает 90% задач, иногда без SQL не обойтись:

  • Очень сложные запросы (с подзапросами и специфическими функциями).
  • Оптимизация производительности.
  • Использование специфичных фич конкретной СУБД.

В Django можно писать «сырой SQL»:

books = Book.objects.raw("SELECT * FROM myapp_book WHERE title LIKE %s", ["%Достоевский%"])

Заключение

Django ORM — это мощный инструмент, который:

  • ускоряет разработку,
  • делает код чище и безопаснее,
  • упрощает поддержку проекта.

Если вы работаете с Django — использовать ORM почти всегда выгоднее, чем писать SQL вручную.
А когда стандартных возможностей не хватает — всегда можно расширить их с помощью «сырого» SQL или сторонних библиотек.



djangomysqlormpostgresqlpythonsqlsqlite