django
July 17, 2024

Модели, Миграции, CRUD (Django #5)

Описание

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

Когда ты вносишь изменения в модели, достаточно создать миграции и применить их. Django сам сгенерирует SQL-запросы, необходимые для изменения базы данных. Важно помнить, что миграции можно откатывать, если что-то пошло не так, что даёт дополнительную гибкость и безопасность при работе с данными.

В общем, миграции делают процесс разработки более управляемым и предсказуемым. Ты всегда знаешь, какие изменения внесены и можешь быть уверен, что база данных синхронизирована с твоими моделями. Это освобождает тебя от рутины и позволяет сосредоточиться на создании новых фич и улучшении приложения.


1. Определение моделей

Модель отвечает за хранение и оперирование данными сайта. Часто для этого используются стандартные СУБД, например, SQLite, MySQL, PostgreSQL, Oracle и другие.

Django использует технологию ORM (Object-Relational Mapping) для взаимодействия с таблицами БД через объекты классов языка Python. Это обеспечивает независимость кода от конкретной СУБД и позволяет легко менять используемую БД без значительных изменений в коде.

Django автоматически обрабатывает подключение к БД и её закрытие, освобождая разработчика от этих задач. По умолчанию Django сконфигурирован для работы с БД SQLite, что удобно для учебных проектов. Текущую настройку БД можно посмотреть в файле settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

SQLite не требует установки дополнительных драйверов. Для работы с БД в формате SQLite можно использовать бесплатную программу DBSQLiteStudio, доступную на официальном сайте.

2. Миграции: создание и выполнение

Модель определяет структуру таблицы в БД. Добавим первую модель для хранения информации о фильмах. Переходим в файл movie/models.py и добавляем следующий класс:

from django.db import models

class Movie(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField(blank=True)
    photo = models.ImageField(upload_to="photos/%Y/%m/%d/")
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    is_published = models.BooleanField(default=True)

    def __str__(self):
        return self.title

Эта модель описывает таблицу movie_movie с полями:

  • id — уникальный идентификатор записи.
  • title — заголовок фильма.
  • content — описание фильма.
  • photo — ссылка на изображение постера фильма.
  • time_create — время создания записи.
  • time_update — время последнего изменения записи.
  • is_published — флаг публикации.

Настраиваем путь для хранения изображений в файле settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Добавляем маршрут для статических данных в файле urls.py:

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Создаем миграцию для модели и выполните её:

python manage.py makemigrations 
python manage.py migrate

После выполнения миграций в БД появится таблица movie_movie.

Миграции в Django — это механизм для управления изменениями в структуре базы данных, синхронизации моделей с базой данных и поддержания целостности данных. Основные аспекты миграций:

  1. Создание и применение изменений: Когда вы изменяете модели в вашем проекте (например, добавляете или удаляете поля, изменяете типы данных), Django создает файлы миграций, которые фиксируют эти изменения. Затем миграции применяются к базе данных, чтобы привести её в соответствие с текущими моделями.
  2. Историчность изменений: Миграции позволяют отслеживать все изменения в структуре базы данных, что упрощает откат к предыдущим версиям схемы данных в случае необходимости.
  3. Автоматизация и синхронизация: Django автоматически генерирует файлы миграций на основе изменений моделей, что упрощает процесс управления базой данных. Миграции также позволяют синхронизировать базу данных между различными окружениями разработки и производства.
  4. Обработка сложных изменений: Помимо простых изменений, миграции могут обрабатывать сложные сценарии, такие как изменение данных или миграции между разными базами данных, что делает их важным инструментом для поддержания целостности и актуальности данных в приложении.

3. CRUD - основы ORM по работе с моделями

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

Для работы с записями в таблице используем консоль Django. Запускаем её командой:

python manage.py shell

Импортируем модель:

from movie.models import Movie

Создаем новую запись:

movie = Movie(title='Интерстеллар', content='Описание фильма Интерстеллар') movie.save()

Или воспользуемся методом create:

Movie.objects.create(title='Интерстеллар', content='Описание фильма Интерстеллар')

3.2 Чтение записей

Для чтения записей используем метод all:

movies = Movie.objects.all()

Или выбор записи по условию с помощью метода filter:

movies = Movie.objects.filter(title='Интерстеллар')

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

Для обновления записи сначала найдем её, а затем измените необходимые поля и сохраните изменения:

movie = Movie.objects.get(id=1)
movie.title = 'Интерстеллар (2014)'
movie.save()

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

Для удаления записи используем метод delete:

movie = Movie.objects.get(id=1) movie.delete()

3.5 Менеджер записей objects

Менеджер записей objects предоставляет методы для выполнения CRUD операций. Некоторые полезные методы:

  • create — создание и сохранение новой записи.
  • all — получение всех записей.
  • filter — фильтрация записей по условиям.
  • get — получение одной записи по условию.
  • delete — удаление записи.

Заключение

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


👈Предыдущая тема | DJANGO | Следующая тема👉