Смешать миграцию данных и схемы в одном файле миграции (Django)? - PullRequest
0 голосов
/ 23 марта 2020

Я слышал мнение, что смешивать миграцию данных и структурную миграцию - это плохая практика в Django. Даже если вы укажете atomic = False в вашем классе миграции. Но я не смог найти никакой информации по этому топи c. Даже мои более опытные коллеги не смогли ответить на этот вопрос.

Итак, плохо ли смешивать миграции данных и структур? Если так, то почему? Что именно может произойти, если я это сделаю?

1 Ответ

0 голосов
/ 23 марта 2020

В прошлом лучшей практикой было держать их отдельно. Второе предложение в этом разделе в документах гласит:

Миграции, которые изменяют данные, обычно называют «миграциями данных»; лучше всего их записывать как отдельные миграции, сидя вместе с миграциями вашей схемы.

Но не перечисляет никаких причин, почему. Начиная с Django ~ 2.0, я разрешал небольшие миграции данных с миграциями схемы. Однако были случаи, когда миграция просто не могла выполняться с миграцией схемы. Есть два основных случая, с которыми я столкнулся.

  1. Миграция данных занимает много времени и не должна быть в первую очередь миграцией. Решением было просто запустить скрипт, который выполнял бы то же, что и миграция данных, но в пакетном режиме.
  2. Попытка добавить / обновить данные, затем создать индекс. Это заставило меня разделить миграции на два отдельных файла. Я не помню точную ошибку, но она просто не будет мигрировать. Это не должно вызывать у вас проблем, если не запущены миграции не-Atomi c, которые оставят вашу БД в неожиданном состоянии.
...