Модели, Миграции, 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 — это механизм для управления изменениями в структуре базы данных, синхронизации моделей с базой данных и поддержания целостности данных. Основные аспекты миграций:
- Создание и применение изменений: Когда вы изменяете модели в вашем проекте (например, добавляете или удаляете поля, изменяете типы данных), Django создает файлы миграций, которые фиксируют эти изменения. Затем миграции применяются к базе данных, чтобы привести её в соответствие с текущими моделями.
- Историчность изменений: Миграции позволяют отслеживать все изменения в структуре базы данных, что упрощает откат к предыдущим версиям схемы данных в случае необходимости.
- Автоматизация и синхронизация: Django автоматически генерирует файлы миграций на основе изменений моделей, что упрощает процесс управления базой данных. Миграции также позволяют синхронизировать базу данных между различными окружениями разработки и производства.
- Обработка сложных изменений: Помимо простых изменений, миграции могут обрабатывать сложные сценарии, такие как изменение данных или миграции между разными базами данных, что делает их важным инструментом для поддержания целостности и актуальности данных в приложении.
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 | Следующая тема👉