2015-07-02 7 views
14

Meine Django-Anwendung hat eine requirements.txt-Datei (gezeigt here), die ich verwende, um Module in meiner virtuellen Umgebung zu installieren. Alles funktioniert gut.Warum dieser Datenbankmigrationsfehler, nachdem ich meine Version django-mptt aktualisiert habe?

Allerdings versuche ich jetzt, Django-MPT von 0.6.1 auf die neueste Version zu aktualisieren. (Ich bin eigentlich nicht daran interessiert, Django-Mptt zu aktualisieren. Ich möchte nur meine Version von Django zu aktualisieren. Aber es scheint zu aktualisieren Django, ich muss zuerst aktualisieren Django-MPT wie beschrieben here). Also mache ich pip install -U django-mptt. Dies bewirkt, dass django-mptt von 0.6.1 auf 0.7.4 und Django von 1.7.1 auf 1.8.2 geht. Und es verursacht auch Django-Cache-Maschine vom Ursprung zum Master. Sie können die Änderungen im folgenden Screenshot sehen.

Dann wenn ich mache manage.py runserver Es fordert mich dann auf zu migrieren. Also mache ich das. Keine Probleme. Jedoch später, wenn ich alle Tabellen löschen und dann wieder laufen migrieren, bekomme ich diesen Fehler während der Migration:

django.db.utils.OperationalError: 
(1005, 'Can\'t create table `mydb_instance`.`#sql-21b_1e` 
(errno: 150 "Foreign key constraint is incorrectly formed")') 

Voll Stack-Trace ist here.

Was ist dieser Fehler? Hat es etwas damit zu tun, dass ich MariaDB (Serverversion: 10.0.15-MariaDB Homebrew) anstelle von MySQL als meine Datenbank verwende?

enter image description here

EDIT: der Abschnitt unterhalb Diesem Punkt wurde auf 6,2015 Juli ADDED um 5:28 UTC

ich oben, dass nach dem Upgrade erwähnt, wurde ich aufgefordert, eine Migrate zu tun. Seltsamerweise trat dies auf, obwohl das Aktualisieren von MPTT keine neuen Migrationsdateien erzeugt! Als ich manage.py runserver tat, erhielt ich die folgende Warnmeldung. Warum? Es macht keinen Sinn:

You have unapplied migrations; your app may not work properly until they are applied. 
Run 'python manage.py migrate' to apply them. 

EDIT: Der Teil unter diesem Punkt am Juli 6,2015 um 17:00 Uhr UTC

Als Experiment wurde hinzugefügt, wechselte ich die zugrunde liegende Datenbank von MariaDB heraus MySQL (Serverversion: 5.6.25). Das Problem blieb bestehen. Der Fehler, den ich bekam, war Cannot add foreign key constraint. Die vollständige Stapelverfolgung ist here.

EDIT: der Abschnitt unterhalb Diesem Punkt wurde auf 6,2015 um 17:05 Uhr UTC Juli ADDED

durch den Stack-Trace I Going vor 5 Minuten geschrieben, fand ich der Fehler durch die folgenden ausgelöst wurde SQL-Anweisung:

ALTER TABLE `myapp2_mymodel2` ADD CONSTRAINT `mymod_mymodel5_id_335ee73cecd6ecbf_fk_myapp5_mymodel5_id` FOREIGN KEY (`mymodel5_id`) REFERENCES `myapp5_mymodel5`; 

Ich sehe, was das Problem ist. myapp2_mymodel hat eine Fremdschlüsseleinschränkung zu myapp5_mymodel. Wenn es jedoch versucht, dieses FK zu erstellen, schlägt es fehl, da das Ziel des Fremdschlüssels noch nicht existiert! Warum unterscheidet sich die Reihenfolge der Tabellenerstellung nach dem Upgrade?

+1

Umfasst die Aktualisierung von Django die Aktualisierung von MySQL? Wenn ja, wie geht das? –

+0

Nein. Durch das Aktualisieren der Python-Pakete wird die zugrunde liegende MARIADB-Datenbank nicht geändert. –

+1

Gehört 'mydb_instance' Ihnen? Oder nach Django? –

Antwort

0

Ich löste das Problem selbst. Es sieht so aus, als ob eine meiner Django-Anwendungen fehlte. Myapp2 hatte keinen Migrationsordner. Ich reparierte es und die Dinge begannen gut zu funktionieren.

Verwandte Themen