--фейк-первоначальная против --поддельные миграционные Джанго?


В чем разница между --fake-initial и --fake в миграциях Django? В чем опасность использования поддельных миграций? Кто-нибудь знает? Очень большое всем спасибо.

Я использую django 1.10

2 17

2 ответа:

Ну, документация очень ясна об этом

-- fake-initial

Позволяет Django пропустить начальную миграцию приложения, если вся база данных таблицы с именами всех моделей, созданных all CreateModel операции в этой миграции уже существуют. Эта опция предназначена для использования при первом запуске миграции для базы данных, которая ранее существовало использование миграций. Однако этот параметр не проверяет для сопоставления схемы базы данных помимо сопоставления имен таблиц

Вы спрашивали о рисках, Ну вот он

Безопасно использовать только в том случае, если вы уверены, что ваша существующая схема соответствует тому, что записано в вашей первоначальной миграции.

-- подделка

Говорит Джанго, чтобы отметить миграций, как будто они были применены или неприменимо, но без фактического запуска SQL для изменения вашего схема базы данных.

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

Еще раз четко выделены риски

Имейте в виду, что использование --fake рискует поставить миграцию таблица состояний в состояние, в котором потребуется выполнить ручное восстановление миграции выполняются правильно.

Этот ответ справедлив не только для версий django 1.8+

@e4c5 уже дает ответ на этот вопрос, но я хотел бы добавить еще одну вещь, когда использовать --fake и --fake-initial.

Предположим, что у вас уже есть база данных из производства, и вы хотите использовать ее для разработки и применить миграцию, не уничтожая данные, в этом случае --fake-initial пригодится.

Это --fake-initial заставит взглянуть на ваши файлы миграции и в основном пропустить создание таблиц, которые уже есть в вашей базе данных. Обратите внимание, однако, что любые миграции, которые не создавайте таблицы, а скорее измените существующие таблицы, которые будут запущены.

И наоборот, если у вас есть существующий проект с файлом миграции и вы хотите сбросить историю существующей миграции, то обычно используется --fake.