Django_migration

Миграции в Django для начинающих

Миграции в Django для начинающих

 

Что нового в Django 1.7? В основном это система миграций. Хоть добавились и другие интересные возможности, система миграций одно из наиважнейших нововведений.

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

В честь этого большого обновления, мы собираемся, рассмотреть систему миграции подробней: как она работает, как получить максимальную пользу и отдачу от нее. Всего будет 3 статьи.

  • Часть 1: Миграции в Django – Для начинающих(текущая статья)
  • Часть 2: Копаем глубже в миграции
  • Часть 3: Миграция данных

Итак, начнем …

Проблемы, которые помогают решить миграции.

Миграции:

  • Ускорить процесс изменения схемы базы данных, который как известно, не быстрый.
  • Сделать простым отслеживание схемы базы данных и связанные с этим изменения, используя Git Базы данных просто не знают о Git или других системах контроля версий.  Git удобен для кода, но не для больших схем баз данных. Обеспечивают легкий способ сохранить данные, связанными со схемой.
  • Содержат код и схемы синхронизированными.

Вы когда-нибудь делали изменения в существующую таблицу (например, переименование поля), и не хотите возиться с удалением таблицы и вновь добавить его?

Миграции решают, это.

Или, возможно, вам необходимо обновить схему базы на живом приложении с миллионами строк данных, которые просто не могут быть потеряны.

Миграции позволяют это сделать гораздо проще.

В общем, миграции позволяют вам управлять и работать со схемой базы данных таким же образом, как и с вашим кодом. Вы можете хранить ее версии в Git, вы можете обновить ее из командной строки, и вам не нужно беспокоиться о создании сложных SQL запросов, чтобы держать все обновленным. Хотя, вы все еще можете, если любите немного помучатся… Я про SQL.

Начало работы с миграциями

Для этого блога мы собираемся создать простое приложение Bitcoin трекер (на самом деле, мы просто собираемся создать одну модель).

Будьте уверены, проверить видео, чтобы увидеть примеры процесса миграции.

Настройка проекта

С установленным Django1.7, Вы можете создать проект с помощью следующих команд:

Это создаст простой проект и приложение с названием historical_data. Для создания модели, нужно изменить файл historical_data/models.py:

Также, не забудьте добавить только что созданное приложение в настройки settings.INSTALLED_APPS.

Это базовая модель для отслеживания Bitcoin цен.

Создание миграции

Первое, что мы должны сделать после создания модели — инициализировать наши миграции. Мы можем сделать это с помощью следующей команды:

 Примечание: Указание имени приложения, historical_data, не является обязательным. Оставив его пустым, будут созданы миграции для всех приложений нашего проекта.

После запуска указанной выше команды система миграций Django создаст миграции и выведет информационное сообщения, примерно такого вида:

Это создаст файлы миграций, которые инструктируют Django о том, как создавать нужные вам модели.

Применение миграций

Затем, чтобы применить модели (например, обновить базу данных), просто запустите:

После этой команды применяться все миграции нашего приложения, а не только от недавно созданной PriceHistory. Создадутся все таблицы для Django и нас (как раньше сделал бы syncdb, до версии 1.7)

Рабочий процесс

Основной процесс использования миграции выглядит так:

  1. Создать или обновить модель.
  2. Запустите ./manage.py makemigrations <приложение>
  3. Выполнить ./manage.py migrate для миграции всего или ./manage.py migrate <приложение> для миграции индивидуального приложения.
  4. Повторить, если необходимо

Вот и все! Довольно просто для начального использования. К счастью, этих основ нам будет хватать в большинстве случаев.

Как применить Миграцию в существующий проект

Если вы начинаете с нуля, обычно все понятно и проблем не возникает. Если же Вы обновили свою Django с предыдущей версии и миграциями South, Вы можете просто начать использовать новую систему миграций, но предварительно, Вам нужно сделать несколько действий.

Рекомендуемый путь обновление путь с South на Django 1.7 миграций, приведен ниже:

  1. Удалить все ваши файлы миграции South (да — просто отправить их прочь).
  2. Запустите ./manage.py makemigrations. Django просто сделает начальные файлы миграции на основе существующих моделей.
  3. Запустите ./manage.py migrate. Django увидит, что таблицы для ваших миграций уже существуют, и пометит миграции как завершенные, не запуская их.

Теперь, если у Вас есть круговые зависимости и Вы получаете ошибки при во время процесса, возможно Вам придется запустить фейковые (поддельные) миграции с:

Кроме того, если у вас есть необходимость поддержки как South и Django миграций одновременно, то необходимо обновить South до версии 1.0 и прочитать эту статью.

South против Django миграций

Для тех, кто знаком с South, новая система должна быть хорошо знакомой и, вероятно, немного понятней. Для удобства в следующей таблице сравниваются старый рабочий процесс South и новый процесс Django миграций:

Шаг South Django миграции
Начальная миграция
  1. выполнить syncdb
  2. затем ./manage.py schemamigration <приложение> --initial
./manage.py makemigrations <приложение>
применение миграции ./manage.py migrate <appname> ./manage.py migrate <приложение>
не первая миграция ./manage.py schemamigration <приложение> --auto ./manage.py makemigration <приложение>

Так из таблицы, мы можем видеть, что система миграций в Django в основном следует принципам миграций South (по крайней мере, для основного функционала) — это немного упрощает понимание новой системы.

Вывод

Вот и все. Все очень просто. Конечно, иногда будут такие случаи, что что-то работает не так, как описано — но мы рассмотрим такие ситуации в следующий раз.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *