Модели, Миграции, 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 | Следующая тема👉