Moja aplikacja Django ma plik requirements.txt (pokazany here), którego używam do instalowania modułów w moim środowisku wirtualnym. Wszystko dziala.Dlaczego ten błąd migracji bazy danych po aktualizacji mojej wersji django-mptt?
Jednak teraz próbuję zaktualizować django-mptt z wersji 0.6.1 do najnowszej wersji. (Właściwie to nie chcę aktualizować django-mptt. Chcę tylko uaktualnić moją wersję Django, ale wydaje się, że uaktualniam Django, muszę najpierw uaktualnić django-mptt zgodnie z opisem here). Więc robię pip install -U django-mptt
. To powoduje, że django-mptt przechodzi z 0.6.1 na 0.7.4, a Django z wersji 1.7.1 na 1.8.2. A także powoduje, że django-cache-machine jest od początku do mistrza. Możesz zobaczyć zmiany na zrzucie ekranu poniżej.
Następnie, gdy wykonuję manage.py runserver
, następnie prosi mnie o migrację. Więc to robię. Bez problemów. Jednak później, jeśli wpadnę wszystkie tabele, a następnie uruchom ponownie migrować, otrzymuję ten błąd podczas migracji:
django.db.utils.OperationalError:
(1005, 'Can\'t create table `mydb_instance`.`#sql-21b_1e`
(errno: 150 "Foreign key constraint is incorrectly formed")')
Pełna ślad stosu jest here.
Co to jest błąd? Czy ma to coś wspólnego z faktem, że używam MariaDB (wersja serwerowa: 10.0.15-MariaDB Homebrew) zamiast MySQL jako mojej bazy danych?
EDIT: część poniżej tego punktu dodano lipca 6,2015 w 5:28 UTC
Wspomniałem wyżej, że po aktualizacji, byłem poproszony zrobić migrują. O dziwo, zdarzyło się to, mimo że uaktualnienie MPTT nie powoduje tworzenia nowych plików migracji! Kiedy zrobiłem manage.py runserver
, otrzymałem następujący komunikat ostrzegawczy. Czemu? To nie ma sensu:
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
EDIT: część poniżej tego punktu dodano 6,2015 lipca o 17:00 UTC
jako eksperyment, przesiadłem się z podstawową bazę danych z MariaDB do MySQL (wersja serwerowa: 5.6.25). Problem utrzymywał się. Błąd, który otrzymałem, to Cannot add foreign key constraint
. Śledzenie całego stosu to here.
EDIT: część poniżej tego punktu dodano lipca 6,2015 na 17:05 UTC
przeżywa ślad stosu napisałem 5 minut temu, znalazłem błąd był wywołany brzmienie Polecenie SQL:
ALTER TABLE `myapp2_mymodel2` ADD CONSTRAINT `mymod_mymodel5_id_335ee73cecd6ecbf_fk_myapp5_mymodel5_id` FOREIGN KEY (`mymodel5_id`) REFERENCES `myapp5_mymodel5`;
Widzę, na czym polega problem. myapp2_mymodel
ma ograniczenie klucza obcego do myapp5_mymodel
. Jednak przy próbie utworzenia tego FK nie działa, ponieważ cel klucza obcego jeszcze nie istnieje! Dlaczego kolejność tworzenia tabel różni się po aktualizacji?
Czy aktualizacja Django wymaga aktualizacji MySQL? Jeśli tak, w jaki sposób to robi? –
Nie. Aktualizacja pakietów Pythona nie zmienia bazowej bazy danych MARIADB. –
Czy "mydb_instance" należy do Ciebie? Lub do Django? –