wake-up-neo.com

django 1.7 migrate erhält den Fehler "Tabelle existiert bereits"

Ich versuche, eine Migration durchzuführen, erhalte jedoch den Fehler:

Django.db.utils.OperationalError: (1050, "Tabelle 'customers_customer' existiert bereits")

Ich erhalte dies durch Ausgabe des folgenden Befehls:

python manage.py migrate

Meine Kundentabelle ist bereits vorhanden. Was kann ich also tun, um die Migration über diesen Fehler zu informieren und die Änderung an meinem Modell auszuführen?

Ich habe dies in meiner lokalen Umgebung mit einer lokalen Datenbank problemlos ausgeführt. Es ist, wenn ich meine Datenbank auf Produktion zeigte und migrate darüber lief, dass ich diesen Fehler erhalte.

56
Atma

Wenn Sie die Tabelle in der Datenbank erstellt haben, können Sie ausführen

python manage.py migrate --fake <appname>

Migrationen als ausgeführt markieren, ohne sie tatsächlich auszuführen

Wenn Sie bei Ihrer Migration einige Aktionen vermeiden möchten, können Sie die Migrationsdatei im Verzeichnis app/migrations bearbeiten und die Vorgänge kommentieren, die Sie bei der Migrationsausführung nicht ausführen möchten.

Docs: https://docs.djangoproject.com/de/1.8/topics/migrations/#upgrade-from-south oder python manage.py help migrate

116
elmonkeylp

Es ist eigentlich python manage.py migrate --fake <appname>

14
Waqas Javed

Wir können dieses Problem auf zwei Arten lösen, wie in der Antwort erwähnt: 1.) Durch Bearbeiten in der Migrationsdatei

In jeder von uns erstellten Anwendung haben wir einen Migrationsordner erstellt. In diesem Migrationsordner wird die Migrationsdatei (0001_initial.py ist die anfänglich erstellte und danach werden alle anderen von dieser anfänglichen Datei abhängigen Dateien erstellt.) Wenn wir python manage.py migrate, Für jede APP wird die Migrationsdatei angewendet, wenn sich Änderungen in der Datei ergeben. Wir können diesen Lauf nach dem Befehl migrate auf dem Terminal anwenden sehen. Wenn es ein Problem in der von uns verwendeten Migrationsdatei gibt um den Fehler an diesem Punkt zu erhalten. In meinem/unserem Fall:

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

Hier können wir feststellen, dass die Datei, in der wir ein Problem haben, erwähnt wird, dh ValetUser.0002_keyroundslots_systemparameters. So können wir zur App und dann zu Migrationen gehen und in der 0002-Datei die CreateModel-Operation dieses bestimmten Modells kommentieren, bei dem wir ein Problem haben Anwenden von Migrationen. Beispiel:

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.) Durch Anwenden einer gefälschten Migration der modifizierten Migrationsdatei der jeweiligen APP, in der der Fehler/das Problem auftritt, wendet --fake die gefälschte Migration an, die sich nicht auf die bereits angewendete Migration des Modells auswirkt.

python manage.py migrate --fake <appname>

Die Antworten, die Waqas und elmonkeylp gegeben haben, sind auch richtig. Ich möchte es nur kurz mit Hilfe des von uns verwendeten Szenarios erklären

3
Vinay Kumar