Śledziłem pierwszy samouczek dotyczący aplikacji z oficjalnej dokumentacji Django i otrzymałem ten błąd podczas próby zapisania niektórych zmian dokonanych za pośrednictwem strony administratora. Zrobiłem kilka badań na ten temat, ale możliwe rozwiązania, które udało mi się znaleźć, takie jak migracja bazy danych, po prostu nie działają. Daj mi tylko znać, jeśli chcesz zobaczyć jakąś konkretną część mojego kodu.
Oto błąd:
OperationalError at / admin / polls / question / 1 / change / no such table: main.auth_user__old Metoda żądania: POST URL żądania: http://127.0.0.1:8000/admin/polls/question/1/change/ Wersja Django: 2.1.4 Typ wyjątku: OperationalError Wartość wyjątku: brak takiej tabeli: main.auth_user__old Lokalizacja wyjątku: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base .py in execute, wiersz 296 Python Executable: / Users / gfioravante / Projects / test_app / ta_env / bin / python3 Python Wersja: 3.7.1 Python Path:
['/ Users / gfioravante / Projects / test_app / test_app', '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/ usr / local /Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7 ',' /usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/ lib / python3.7 / lib-dynload ',' /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages '] Czas serwera: środa, 5 grudnia 2018 16:45:00 +0000
i śledzenie:
Środowisko:
Metoda żądania: URL żądania POST: http://127.0.0.1:8000/admin/polls/question/1/change/
Wersja Django: 2.1.4 Wersja Pythona: 3.7.1 Zainstalowane aplikacje: ['polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django .contrib.sessions ',' django.contrib.messages ',' django.contrib.staticfiles '] Zainstalowane oprogramowanie pośrednie: [' django.middleware.security.SecurityMiddleware ',' django.contrib.sessions.middleware.SessionMiddleware ',' django .middleware.common.CommonMiddleware ',' django.middleware.csrf.CsrfViewMiddleware ',' django.contrib.auth.middleware.AuthenticationMiddleware ',' django.contrib.messages.middleware.MessageMiddleware ',' django.contrib.auth.middleware.AuthenticationMiddleware ',' django.contrib.messages.middleware.MessageMiddleware ',' django.middleware. ']
Śledzenie:
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w _execute 85. return self.cursor.execute (sql, params)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py” w execute 296. return Database.Cursor.execute (self, query, parametry)
Powyższy wyjątek (brak takiej tabeli: main.auth_user__old) był bezpośrednią przyczyną następującego wyjątku:
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py” w wewnętrznym 34. response = get_response (żądanie)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py” w _get_response 126. response = self.process_exception_by_middleware (e, request)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py” w _get_response 124. response = wrapped_callback (request, * callback_args, ** callback_kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” w opakowaniu 604. return self.admin_site.admin_view (view) (* args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” w _wrapped_view 142. response = view_func (request, * args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py” w _wrapped_view_func 44. response = view_func (request, * args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py” w wewnętrznym 223. widoku powrotu (żądanie, * args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” w change_view 1640. return self.changeform_view (request, object_id, form_url, extra_context)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” w _wrapper 45. return bound_method (* args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” w _wrapped_view 142. response = view_func (request, * args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” w changeform_view 1525. return self._changeform_view (request, object_id, form_url, extra_context)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” w _changeform_view 1571. self.log_change (żądanie, nowy_object, change_message)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” w log_change 826. change_message = wiadomość,
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py” w log_action 35. change_message = change_message,
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py” w manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py” w create 413. obj.save (force_insert = True, using = self.db )
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” w save 718. force_update = force_update, update_fields = update_fields)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” w save_base 748. updated = self._save_table (raw, cls, force_insert, force_update , używając, update_fields)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” w _save_table 831. result = self._do_insert (cls._base_manager, using, fields , update_pk, raw)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” w _do_insert 869. using = using, raw = raw)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py” w manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py” w _insert 1136. return query.get_compiler (using = using) .execute_sql (return_id )
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py” w execute_sql 1289. kursor.execute (sql, params)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w execute 100. return super (). Execute (sql, params)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w execute 68. return self._execute_with_wrappers (sql, params, many = False, executor = self._execute)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w _execute_with_wrappers 77. return executor (sql, params, many, context)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w _execute 85. return self.cursor.execute (sql, params)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py” w wyjściu 89. podnieś dj_exc_value.with_traceback (traceback) z exc_value
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” w _execute 85. return self.cursor.execute (sql, params)
Plik „/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py” w execute 296. return Database.Cursor.execute (self, query, parametry)
Typ wyjątku: OperationalError at / admin / polls / question / 1 / change / Exception Value: no such table: main.auth_user__old
źródło
python manage.py showmigrations
sprawdzić, które migracje nie zrobiłOdpowiedzi:
Właśnie natknąłem się na to sam, wygląda na to, że ma związek z https://code.djangoproject.com/ticket/29182 . Na razie możesz po prostu obniżyć swoją wersję sqlite do wersji wcześniejszej niż 2.6 (np. 2.5.1)
źródło
Pozbądź się tego problemu, wykonując następujące czynności:
pip install django==2.1.5
python manage.py makemigrations
a potempython manage.py migrate
python manage.py runserver
GOTOWE!
źródło
Właśnie to zrobiłem i rozwiązało problem:
Następnie:
źródło
Oto, co zrobiłem, aby rozwiązać ten problem:
Przejdź do środowiska wirtualnego i zainstaluj
[email protected]
pip install django==2.1.7
Usuń
db.sqlite3
plik z folderu głównego.db.sqlite3
w folderze głównym.Ponownie uruchom migracje:
Teraz powinno działać dobrze.
źródło
Problem jest spowodowany zmodyfikowanym zachowaniem
ALTER TABLE RENAME
instrukcji w SQLite 3.26.0 (patrz uwaga dotycząca zgodności ). Wprowadzili równieżPRAGMA legacy_alter_table = ON
oświadczenie w celu zachowania zgodności z poprzednimi wersjami. Nadchodzące wydanie Django 2.1.5 wykorzystuje wspomnianą wcześniej instrukcję jako poprawkę. Oczekuje się, że to 1 stycznia 2019 r.źródło
przejdź do tego folderu django / db / backends / sqlite3
schema.py
plik kopii zapasowej do innego folderuotwórz oryginalny schema.py w edytorze tekstu
tam możesz zobaczyć fragment kodu, taki jak
def __enter__(self): # Some SQLite schema alterations need foreign key constraints to be # disabled. Enforce it here for the duration of the schema edition. if not self.connection.disable_constraint_checking(): raise NotSupportedError( 'SQLite schema editor cannot be used while foreign key ' 'constraint checks are enabled. Make sure to disable them ' 'before entering a transaction.atomic() context because ' 'SQLite3 does not support disabling them in the middle of ' 'a multi-statement transaction.' ) self.connection.cursor().execute('PRAGMA legacy_alter_table = ON') return super().__enter__()
skomentuj je i wklej następujący fragment kodu
def __enter__(self): # Some SQLite schema alterations need foreign key constraints to be # disabled. Enforce it here for the duration of the transaction. self.connection.disable_constraint_checking() self.connection.cursor().execute('PRAGMA legacy_alter_table = ON') return super().__enter__()
To zadziałało dla mnie. (kopia zapasowa schema.py jest na wypadek, gdyby praca poszła źle; D)
po więcej informacji
https://github.com/django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef
źródło
Rozwiązałem problem, aktualizując Django z 2.1.4 do 2.1.5, ale musiałem przebudować projekt od nowa, ponieważ błąd wydaje się być w jakiś sposób powiązany z obiektami, które wstawiłem do bazy danych przy użyciu starej wersji Django.
źródło
Proszę bardzo.
źródło
dla mnie było to z mojej wersji django (to było 2.1) zainstaluj wyższą wersję (z jakichś powodów używałem 2.1.5) ** usuń db.sqlite3 i wszystko w folderze migracji oprócz komendy init .py run:
pip install django==2.1.5 --upgrade python manage.py makemigrations python manage.py migrate python manage.py createsuperuser python manage.py runserver
źródło
To samo przytrafiło się mnie, bardzo frustrujące. Używam anacondy w moich środowiskach, stwierdziłem, że nie mogę usunąć sqlite bez natychmiastowej ponownej instalacji najnowszej wersji sqlite. Próbowanie starszej wersji django również nie działało. Jedynym rozwiązaniem, które mi się sprawdziło, jest użycie bazy danych PostgreSQL. Z pewnością nie jest to idealne rozwiązanie, ale planuję w przyszłości wykorzystać bazę danych PostgreSQL, więc nie była to całkowita strata czasu. Jeśli znajdziesz się w tym samym miejscu, w którym byłem, to ten film może być pomocny, jeśli chcesz wiedzieć, jak połączyć bazę danych PostgreSQL z projektem django.
Będziesz musiał zainstalować bazę danych postgreSQL przed dokonaniem zmian w pliku settings.py, instalacja wymaga mniej więcej kliknięcia Dalej na wszystkich opcjach. Pamiętaj jednak, jaką nazwę użytkownika i hasło używasz podczas instalacji.
źródło
W przypadku powyższego problemu i rozwiązania:
1) Podejdź do terminala i wpisz
pip install django==2.1.7
lub najnowszą wersję django2) Po instalacji, w terminalu wpisz
python manage.py makemigrations
, a następniepython manage.py migrate
3) W terminalu uruchom serwer z kodem
python manage.py runserver
4) Zaloguj się do serwera administratora za pomocą hasła i dodaj produkt, pomyślnie doda produkt.
źródło
Dla innych, którzy nie chcą obniżać wersji żadnego oprogramowania, możesz udać się do swojego
settings.py
pliku, awDATABASES
dyktandzie możesz zastąpić.sqlit3
go.postgresql
, a tuż pod nim zmienićdb.sqlit3
nadb.sql
. Spowoduje to przełączenie domyślnej bazy danych na korzystanie z PostgreSQL.Robiąc to, będziesz musiał
pip install psycopg2
.Usuń
db.sqlite3
plik (jeśli go masz / nie obchodzi Cię utrata tego, co w nim jest) i wszystko inne, co nie jest__init__.py
plikiem w folderze migracji aplikacji. Gdy już to wszystko zrobisz, możesz uruchomićpython manage.py makemigrations
i Pythonamanage.py migrate
a potem powinno działać :)Mam nadzieję, że udało mi się komuś pomóc!
źródło
Open => / YourAppFolder / migrations / Możesz zobaczyć migrowane pliki, tak jak „ 0001_initial.py ”, aby usunąć wszystkie te pliki. I uruchom następujące polecenie 1-
python manage.py makemigrations
2 -python manage.py migrate
Hope, musi rozwiązać twój problemźródło
Nawet po aktualizacji do najnowszej wersji Django 2.2.12 i uruchomieniu dowolnego
migrate
lub oficjalnego skryptu odbudowy bazy danych , otrzymałem ten sam błąd__old_
:django.db.utils.IntegrityError: The row in table 'djangocms_blog_post_translation' with primary key '2' has an invalid foreign key: djangocms_blog_post_translation.master_id contains a value '2' that does not have a corresponding value in djangocms_blog_post__old.id.
Oto mój hack:
sqlite3 my_db.db .dump > my_db.sql
__old" ("id")
z" ("id") DEFERRABLE INITIALLY DEFERRED
sqlite3 my_db.db < my_db.sql
źródło
Kroki:
Odinstaluj aktualne Django ze swojego ENV. Po prostu usuń folder „anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django wszystkie wersje .. * Uwaga: Tylko dla użytkowników Anacondy inni użytkownicy powinni dowiedzieć się, jak odinstalować pakiet z twojego ENV.
Wejdź na Github.com/django/django.
Pobierz repozytorium jako plik zip.
Wypakuj plik zip.
Przełącz się na ENV.
Wejdź do wyodrębnionego folderu.
Uruchom "python setup.py install" I zainstaluj Django.
Usuń poprzedni plik db.sqlite3. Teraz ponownie zastosuj migracje, aby utworzyć nowy plik db.sqlite3.
* Uwaga: nie wiem, jak naprawić poprzedni plik dbfile i zapobiec utracie danych. Więc powiedz mi, jeśli wiesz.
Gratulacje! Teraz działa dobrze.
Aktualizacja do najnowszego django w styczniu z oficjalnej wersji Django.
źródło
Miałem ten sam problem, z wyjątkiem tego, że miałem 2 bazy danych sqlite i niestandardowy router bazy danych. Udało mi się go uruchomić, obniżając Django do wersji 1.11.20 i nie ma potrzeby ponownego tworzenia baz danych.
źródło
Dla tych, którzy nie mogą rozwiązać tego błędu za pomocą powyższych odpowiedzi, jeśli Twoja aplikacja została utworzona z nazwą „main”, ten błąd może być przyczyną tego samego problemu z nazwą aplikacji. Spróbuj więc zmienić nazwę aplikacji „main” na inną.
źródło
musisz zaktualizować Django, ten problem został rozwiązany w tym PR https://github.com/django/django/pull/10733
źródło
Rozwiązałem problem, zmieniając niektóre modele. Miałem jeden nazwany projekt i jeden nazwany projekt. Tabele bazy danych się pomyliły i wyrzuciły mi ten błąd.
źródło
Rozwiązałem ten problem, używając poniżej:
1) Usuń plik db.sqlit3
2) katalog aplikacji usuń wszystko w pycache
3) manage.py makemigrations, manage.py migrate, manage.py createduperuser, a następnie manage.py runerver.
źródło
Miałem ten sam problem i naprawiłem go, wykonując poniższe czynności:
1) Pobierz najnowszą
django
wersję2) pobierz najnowsze
SQL Lite
wersję3) usuń
db.sqlite3
plik ze swojego projektu4) Dokonaj niewielkiej zmiany w
models.py
(np. Zmień rozmiar pola)5) wygeneruj nowy
db.sqllite3
plik, uruchamiającmakemigrations
&migrate commands
6) zaimportuj nowo utworzony
db.sqllite3
plik doSQL Lite
źródło
Zainstalowałem / obniżyłem django do wersji 2.2, to usunęło django 3.x
pip install django==2.2
a następnie usunąłem plik db.sqlite, a następnie
próbowałem
źródło
zaktualizuj wersję django: pip install django - a następnie uaktualnij
źródło
Są tylko 4 rzeczy, które zrobiłem w linii poleceń i naprawiłem moje.
py manage.py makemigrations
py manage.py migrate
py manage.py runserver
(serwer startowy)źródło
django-2.2.7
To zadziałało dla mnie -
1) Usuń plik db.sqlite3 .
2) W każdej aplikacji, w folderze migracji , usuń wszystko inne niż __init__.py .
3) W każdej aplikacji usuń __pycache__ folder .
Nie jestem pewien, czy musiałeś to zrobić dla wszystkich aplikacji, czy tylko danej aplikacji, ale to zadziałało.
źródło
migrations
plików jest wartą praktyki przy rozwiązywaniu tego rodzaju problemów. @rajvijay