Если вы начали заниматься веб-разработкой и столкнулись с фреймворком Django, то, вероятно, слышали о термине "ORM". Django ORM — это один из ключевых инструментов, который помогает легко работать с данными в Django. В этом посте мы подробно объясним концепцию Django ORM и его использование, чтобы даже новички могли понять.


1. Что такое ORM?

ORM — это сокращение от Object-Relational Mapping. Проще говоря, это инструмент, который помогает легко выполнять сложные операции, связанные с базами данных, с помощью кода на Python.

Схема концепции ORM

Обычно веб-приложения должны выполнять операции по сохранению, извлечению, обновлению и удалению данных в базе данных. Однако базы данных обычно управляются с помощью языка, называемого SQL. SQL — это очень полезный язык, но для разработчика может быть обременительно каждый раз писать SQL-запросы вручную. Особенно, когда данные становятся сложными и количество связей увеличивается, становится трудно каждый раз писать код для их обработки.

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


2. Основные концепции Django ORM

В Django таблицы базы данных представляются как модели (model). Модель — это класс, который определяет структуру базы данных и способы работы с данными, а Django ORM автоматически генерирует SQL-запросы и взаимодействует с базой данных через эту модель.

2.1 Определение модели

Модели определяются как классы Python в Django. Давайте создадим простую модель, которая может хранить блоги.

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    publish_date = models.DateTimeField(auto_now_add=True)

В приведенном выше коде мы определили модель с именем Post. Эта модель имеет поля title, content и publish_date. Каждое поле представляет собой столбец (column) в базе данных, а эта модель представляет таблицу в базе данных.

  • title: строковое поле для хранения заголовка поста с максимальной длиной 100 символов.
  • content: поле для хранения содержимого поста, это текстовое поле без ограничений по длине.
  • publish_date: поле даты, которое автоматически записывает дату публикации поста.

Таким образом, вы можете определить структуру таблицы базы данных через классы Python. Django ORM использует эту модель для создания таблиц и управления данными.

2.2 Операции с базой данных

Теперь, когда модель определена, давайте попробуем выполнить операции с базой данных, используя эту модель. Четыре основных операции часто называют CRUD: Создание (Create), Чтение (Read), Обновление (Update), Удаление (Delete). Django ORM помогает легко выполнять эти операции CRUD.

2.2.1 Создание данных (Create)

Если вы хотите сохранить пост в базе данных, просто выполните следующий код.

new_post = Post.objects.create(title='Первый пост', content='Введите содержимое поста здесь.')

Используя метод Post.objects.create(), вы создаете данные, и новая запись добавляется в базу данных.

2.2.2 Чтение данных (Read)

Если вы хотите извлечь данные из базы данных, вы можете использовать такие методы.

all_posts = Post.objects.all()  # Извлечение всех постов
specific_post = Post.objects.get(id=1)  # Извлечение поста с конкретным id
  • Post.objects.all(): получает все посты из базы данных.
  • Post.objects.get(id=1): получает одну запись, удовлетворяющую определенному условию. В данном случае это пост с id 1.
2.2.3 Обновление данных (Update)

Если вы хотите изменить данные, то сначала извлеките их, затем измените и сохраните.

specific_post = Post.objects.get(id=1)
specific_post.title = 'Изменённый заголовок'
specific_post.save()  # Сохранение изменений в базе данных

Когда вы вызываете метод save(), изменения отражаются в базе данных.

2.2.4 Удаление данных (Delete)

Если вы хотите удалить данные, выполните следующий код.

specific_post = Post.objects.get(id=1)
specific_post.delete()  # Удаление поста из базы данных

Когда вы вызываете метод delete(), соответствующая запись удаляется из базы данных.


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

  • Не нужно знать SQL: благодаря ORM разработчики могут работать с данными, не зная сложных SQL-запросов. Это особенно удобно для новичков, которые имеют мало знаний о базах данных.
  • Независимость от базы данных: Django ORM совместим с различными системами управления базами данных, такими как MySQL, PostgreSQL, SQLite и т. д. Поэтому после разработки приложения, если требуется заменить базу данных, можно легко переключиться просто изменив настройки базы данных без необходимости редактирования кода.
  • Повышение производительности: Поскольку можно работать с данными на Python, скорость разработки увеличивается, и производительность возрастает.

4. Когда следует использовать ORM?

ORM удобно использовать при взаимодействии с базами данных, но оно не всегда подходит для всех ситуаций. Если необходимо использовать сложные SQL-запросы, реализация с помощью ORM может быть более сложной. В таких случаях вы можете написать SQL напрямую или использовать встроенную в Django функцию Raw SQL. Однако для обычных операций CRUD или обработки реляционных моделей ORM намного удобнее и интуитивно понятнее, поэтому его стоит использовать.


Заключение

Django ORM — это мощный инструмент, который упрощает взаимодействие с базами данных. Отсутствие необходимости в написании SQL-кода позволяет даже новичкам легко работать с данными, создавая, извлекая, обновляя и удаляя их с помощью Python-кода. Если вы хотите разрабатывать веб-приложения с использованием Django, важно хорошо понимать и использовать концепцию ORM. Это позволит повысить продуктивность и написать более эффективный код.

Теперь вам должно быть немного яснее, что значит определять модели и использовать ORM в Django. По мере практики с CRUD-операциями вы сможете глубже ощутить удобство ORM.