Подтвердить что ты не робот

Django 1.7 migrate получает ошибку "таблица уже существует"

Я пытаюсь применить миграцию, но получаю ошибку:

django.db.utils.OperationalError: (1050, "Таблица" customers_customer ' уже существует ")

Я получаю это, вызывая следующую команду:

python manage.py migrate

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

Я запускал это в своей локальной среде с локальной базой данных без проблем. Именно тогда я указал свою базу данных на производство и запустил migrate выше, чтобы получить эту ошибку.

4b9b3361

Ответ 1

Если у вас есть таблица, созданная в базе данных, вы можете запустить

python manage.py migrate --fake <appname>

Отметить миграции как выполняемые без их фактического запуска

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

Документы: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south или python manage.py help migrate

Ответ 2

Фактически python manage.py migrate --fake <appname>

Ответ 3

Мы можем решить эту проблему двумя способами, как указано в ответе: 1.) путем редактирования в файле миграции

У нас есть папка миграций, созданная в каждом созданном нами приложении. В этой папке переноса файл миграции (0001_initial.py изначально создан, и после этого будут созданы все другие файлы, зависящие от этого начального файла), Когда мы запустим python manage.py migrate. Для каждого APP файл миграции будет применяться, если есть изменения в файле. Мы можем увидеть этот запуск Применить на терминал после команды migrate. Если в файле миграции есть проблема, мы используем эту ошибку. В моем/нашем случае:

Applying ValetUser.0002_keyroundslots_systemparameters_vehicleparking_vehicleparkingdetails...Traceback (most recent call last):
sqlite3.OperationalError: table "valet_keyroundslots" already exists

Здесь мы можем заметить, что упоминается файл, в котором мы говорим, т.е. ValetUser.0002_keyroundslots_systemparameters. Таким образом, мы можем перейти в приложение, а затем выполнить миграцию и в файле 0002. Мы можем отметить операцию CreateModel этой конкретной модели, в которой мы сталкиваемся с проблемой, пока применяя миграцию. пример:

operations = [
    # migrations.CreateModel(
    #     name='KeyRoundSlots',
    #     fields=[
    #         ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
    #         ('key_round', models.IntegerField()),
    #         ('key_slot', models.IntegerField()),
    #         ('is_available', models.BooleanField()),
    #         ('Valet_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='valet_location', to='ValetUser.ValetAt')),
    #     ],
    #     options={
    #         'db_table': 'valet_keyroundslots',
    #     },
    # ),

2.) Применяя поддельную миграцию модифицированного файла миграции конкретного APP, в котором мы сталкиваемся с ошибкой/проблемой, --fake применит фальшивую миграцию, которая не повлияет на уже примененную миграцию модели.

python manage.py migrate --fake <appname>

Ответы, данные Waqas и elmonkeylp, также правильные, я просто хочу объяснить это вкратце с помощью использования сценария