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.
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
Es ist eigentlich python manage.py migrate --fake <appname>
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