#django #sqlite #django-models #django-migrations
#django #sqlite #django-модели #django-миграции
Вопрос:
Когда я запускаю python manage.py migrate --fake photos zero
:
Выполняемые операции:
отменить все миграции: фотографии, выполняющие миграции: состояния модели рендеринга… СДЕЛАНО
, не применяя photos.0001_initial… ПОДДЕЛАННЫЙ
После выполнения вышеуказанной команды я запустил python manage.py migrate
в то время, когда произошла эта ошибка.
Обратная трассировка: обратная трассировка (последний последний вызов):
Файл «C:Users …libsite-packagesdjangodbbackendssqlite3base.py «, строка 411, в базе данных execute return.Cursor.execute(self, запрос)
django.db.utils.OperationalError: таблица «photos_userphoto» уже существует
Когда я запускаю python manage.py migrate --fake photos
:
Выполняемые операции: Применить все миграции: фотографии Запуск миграции: применение фотографий.0001_initial… ПОДДЕЛЬНОЕ применение фотографий.0002_auto_20210303_0120… ПОДДЕЛАННЫЙ
После выполнения приведенной выше команды я запустил python manage.py migrate
, и это работает отлично.
Running migrations:
Applying photos.0003_auto_20210303_0123... OK
Итак, мой вопрос в том, в чем разница между python manage.py migrate --fake <appname>
vs python manage.py migrate --fake <appname> zero
и почему первая команда выдает мне ошибку?
Спасибо..
Ответ №1:
Похоже, у вас какое-то недопонимание по поводу --fake
флага. Согласно документации --fake
флаг:
Помечает миграции до целевой (следуя приведенным выше правилам) как применяемые, но без фактического запуска SQL для изменения схемы вашей базы данных.
В нем также указано, что он предназначен для опытных пользователей, если они вносят изменения вручную. По сути, Django создает таблицу django_migrations
для управления вашими миграциями. Он добавляет к нему запись, чтобы отметить, была ли применена миграция. Что --fake
нужно, так это просто добавлять / удалять записи в / из этой таблицы в соответствии с указанным вами переносом. Также zero
средство для отмены всех миграций.
python manage.py migrate --fake photos zero
Приведенная выше команда означает, что вы в основном говорите Django:
У меня есть или я вручную удалю (d) все таблицы и т.д. из базы данных для фотографий приложения
python manage.py migrate --fake <appname>
В приведенной выше команде вы не указываете миграцию (в предыдущей вы указали ноль), это означает предположить, что вы имеете в виду до самой последней миграции. В основном с --fake
помощью этой команды означает:
У меня есть или я буду вручную создавать все таблицы и т.д. в базе данных для миграции до самой последней.
Насколько я понимаю, вы только внесли некоторые изменения и хотели обновить свою базу данных, для этого вы могли бы просто написать:
python manage.py migrate