Схема-миграция vs дата-миграция
Миграция в Django - это файл в папке migrations
, который запускается командой manage.py migrate
. Django не делает различий между ними, но для удобства принято разделять миграции на два вида. Одни меняют только данные и их называют дата-миграциями. Другие изменяют саму структуру таблицы: добавляют и удаляют колонки — их называют схема-миграциями.
Схема-миграция меняет структуру базы данных — её схему. Пример:
# Generated by Django 2.0.6 on 2018-07-23 15:13
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('reviews', '0015_auto_20180723_1810'),
]
operations = [
migrations.RemoveField(
model_name='enhancement',
name='completed_by',
),
migrations.RemoveField(
model_name='enhancement',
name='review',
),
migrations.DeleteModel(
name='Enhancement',
),
]
Дата-миграция изменяет только данные. Пример:
from django.db import migrations
def copy_teaser_text_to_md_field(apps, schema_editor):
Lesson = apps.get_model('challenges', 'Lesson')
for lesson in Lesson.objects.all():
lesson.teaser_text_md = lesson.teaser_text
lesson.save()
class Migration(migrations.Migration):
dependencies = [
('challenges', '0040_auto_20180817_1826'),
]
operations = [
migrations.RunPython(copy_teaser_text_to_md_field)
]
Иногда пишут смешанные миграции. Например, так может выглядеть перенос данных из текстового поля в новое, поддерживающее разметку markdown:
- добавить в БД markdown поле
- скопировать данные
- удалить устаревшее поле
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.