Ich habe das erste App-Tutorial aus den offiziellen Django-Dokumenten befolgt und diesen Fehler erhalten, als ich versucht habe, einige Änderungen zu speichern, die über die Administrationsseite vorgenommen wurden. Ich habe einige Nachforschungen angestellt, aber die möglichen Lösungen, die ich finden konnte, wie die Migration der Datenbank, funktionieren einfach nicht. Lassen Sie mich einfach wissen, ob Sie einen bestimmten Teil meines Codes sehen möchten.
Folgendes ist ein Fehler:
OperationalError unter / admin / polls / question / 1 / change / keine solche Tabelle: main.auth_user__old Anforderungsmethode: POST-Anforderungs-URL: http://127.0.0.1:8000/admin/polls/question/1/change/ Django Version: 2.1.4 Ausnahmetyp: OperationalError Ausnahmewert: Keine solche Tabelle: main.auth_user__old Ausnahmestandort: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base .py in execute, Zeile 296 Python Executable: / Users / gfioravante / Projects / test_app / ta_env / bin / python3 Python-Version: 3.7.1 Python-Pfad:
['/ 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 '] Serverzeit: Mi, 5. Dezember 2018 16:45:00 +0000
und der Traceback:
Umgebung:
Anforderungsmethode: POST-Anforderungs-URL: http://127.0.0.1:8000/admin/polls/question/1/change/
Django-Version: 2.1.4 Python-Version: 3.7.1 Installierte Anwendungen: ['polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django' .contrib.sessions ',' django.contrib.messages ',' django.contrib.staticfiles '] Installierte Middleware: [' 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.middleware.Fickjacking. ']
Zurück verfolgen:
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute (sql, params)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" in Execute 296. return Database.Cursor.execute (self, query, params)
Die obige Ausnahme (keine solche Tabelle: main.auth_user__old) war die direkte Ursache für die folgende Ausnahme:
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner 34. response = get_response (request)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 126. response = self.process_exception_by_middleware (e, request)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 124. response = wrap_callback (request, * callback_args, ** callback_kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" in Wrapper 604. return self.admin_site.admin_view (view) (* args, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func (Anfrage, * Argumente, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 44. response = view_func (Anfrage, * Argumente, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py" in innerer 223. Rückgabeansicht (Anfrage, * args, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" in change_view 1640. return self.changeform_view (request, object_id, form_url, extra_context)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapper 45. return bound_method (* args, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func (Anfrage, * Argumente, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" in changeform_view 1525. return self._changeform_view (request, object_id, form_url, extra_context)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" in _changeform_view 1571. self.log_change (Anfrage, neues_Objekt, Änderungsnachricht)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" in log_change 826. change_message = message,
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py" in log_action 35. change_message = change_message,
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" in manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" in create 413. obj.save (force_insert = True, using = self.db )
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" in save 718. force_update = force_update, update_fields = update_fields)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" in save_base 748. aktualisiert = self._save_table (raw, cls, force_insert, force_update , using, update_fields)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" in _save_table 831. result = self._do_insert (cls._base_manager, using, fields , update_pk, raw)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" in _do_insert 869. using = using, raw = raw)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" in manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" in _insert 1136. return query.get_compiler (using = using) .execute_sql (return_id) )
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 1289. cursor.execute (sql, params)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in execute 100. return super (). Execute (sql, params)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in Execute 68. return self._execute_with_wrappers (sql, params, many = False, executor = self._execute)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute_with_wrappers 77. return executor (sql, params, many, context)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute (sql, params)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py" in Exit 89. Erhöhen Sie dj_exc_value.with_traceback (traceback) von exc_value
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute (sql, params)
Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" in Execute 296. return Database.Cursor.execute (self, query, params)
Ausnahmetyp: OperationalError unter / admin / polls / question / 1 / change / Ausnahmewert: keine solche Tabelle: main.auth_user__old
quelle
python manage.py showmigrations
zu sehen, welche Migrationen nicht durchgeführt wurdenAntworten:
Ich bin gerade selbst darauf gestoßen, es scheint mit https://code.djangoproject.com/ticket/29182 verwandt zu sein . Im Moment können Sie Ihre SQLite-Version einfach auf eine Version vor 2.6 (z. B. 2.5.1) herunterstufen.
quelle
Beheben Sie dieses Problem auf einfache Weise, indem Sie die folgenden Schritte ausführen:
pip install django==2.1.5
python manage.py makemigrations
wiederpython manage.py migrate
python manage.py runserver
ERLEDIGT!
quelle
Habe dies einfach getan und das Problem gelöst:
Dann:
quelle
Das Problem wird durch das geänderte Verhalten der
ALTER TABLE RENAME
Anweisung in SQLite 3.26.0 verursacht (siehe Kompatibilitätshinweis ). Sie führten auch diePRAGMA legacy_alter_table = ON
Anweisung ein, um die Kompatibilität mit früheren Versionen aufrechtzuerhalten. Die kommende Django-Version 2.1.5 verwendet die zuvor erwähnte Anweisung als Hotfix. Es wird am 1. Januar 2019 erwartet.quelle
Folgendes habe ich getan, um dieses Problem zu lösen:
Gehen Sie zur virtuellen Umgebung und installieren Sie
[email protected]
pip install django==2.1.7
Löschen Sie die
db.sqlite3
Datei in Ihrem Stammordner.db.sqlite3
in Ihrem Stammordner.Führen Sie Migrationen erneut aus:
Jetzt sollte es gut gehen.
quelle
Gehen Sie zu diesem Ordner django / db / backends / sqlite3
Sicherungsdatei
schema.py
in einen anderen OrdnerÖffnen Sie die ursprüngliche schema.py in einem Texteditor
Dort sehen Sie ein Code-Snippet wie
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__()
Kommentieren Sie sie und fügen Sie das folgende Code-Snippet ein
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__()
Das hat bei mir funktioniert. (Die Sicherung für die Datei schema.py erfolgt für den Fall, dass die Arbeit schief geht. D)
Für mehr Information
https://github.com/django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef
quelle
Ich habe das Problem durch ein Upgrade von Django von 2.1.4 auf 2.1.5 gelöst, musste das Projekt jedoch neu erstellen, da der Fehler irgendwie mit den Objekten zusammenhängt, die ich mit der alten Version von Django in die Datenbank eingefügt habe.
quelle
Für mich war es von meiner Django-Version (das war 2.1), eine höhere Version zu installieren (ich habe aus bestimmten Gründen 2.1.5 verwendet) ** lösche db.sqlite3 und alles im Migrationsordner außer dem Befehl 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
quelle
Das gleiche ist mir passiert, sehr frustrierend. Ich verwende Anaconda für meine Umgebungen. Ich stellte fest, dass ich SQLite nicht entfernen konnte, ohne sofort die aktuellste Version von SQLite neu zu installieren. Der Versuch einer älteren Version von Django schien ebenfalls nicht zu funktionieren. Die einzige Lösung, die für mich funktioniert hat, ist die Verwendung einer PostgreSQL-Datenbank. Es ist sicherlich nicht ideal, aber ich plane, die PostgreSQL-Datenbank in Zukunft zu verwenden, damit dies keine reine Zeitverschwendung war. Wenn Sie sich am selben Ort wie ich befinden, kann dieses Video hilfreich sein, wenn Sie wissen möchten, wie Sie die PostgreSQL-Datenbank mit Ihrem Django-Projekt verbinden.
Sie müssen die postgreSQL-Datenbank installieren, bevor Sie die Änderungen in settings.py vornehmen können. Bei der Installation müssen Sie mehr oder weniger auf Weiter klicken. Denken Sie jedoch an den Benutzernamen und das Kennwort, die Sie während der Installation verwenden.
quelle
Los geht's.
quelle
Für das obige Problem und die Lösung ist:
1) Gehen Sie zum Terminal und geben Sie
pip install django==2.1.7
die neueste Version von Django ein2) Geben Sie nach der Installation In das Terminal ein
python manage.py makemigrations
und dannpython manage.py migrate
3) Starten Sie im Terminal den Server mit Code
python manage.py runserver
4) Melden Sie sich mit dem Kennwort beim Administrationsserver an und fügen Sie das Produkt hinzu. Das Produkt wird erfolgreich hinzugefügt.
quelle
Für andere , die wollen keine Software degradieren, können Sie in Ihrem Kopf -
settings.py
Datei und in derDATABASES
dict, können Sie ersetzen.sqlit3
mit.postgresql
, und es direkt unter der Änderungdb.sqlit3
zudb.sql
. Dadurch wird Ihre Standard-Datenbank auf die Verwendung von postgreSQL umgestellt.Dazu müssen Sie
pip install psycopg2
.Löschen Sie Ihre
db.sqlite3
Datei (wenn Sie eine haben / sich nicht darum kümmern, was darin enthalten ist) und alles andere, was nicht die__init__.py
Datei im Migrationsordner Ihrer App ist. Sobald Sie das alles getan haben, können Sie laufenpython manage.py makemigrations
und Pythonmanage.py migrate
und dann sollte es funktionieren :)Hoffe ich konnte jemandem helfen!
quelle
Öffnen => / YourAppFolder / migrations / Sie würden sehen, dass die migrierenden Dateien genau wie ' 0001_initial.py ' alle diese Dateien löschen. Und führen Sie den folgenden Befehl aus: 1-
python manage.py makemigrations
2-python manage.py migrate
Hoffe, er muss Ihr Problem lösenquelle
Selbst nach dem Upgrade auf das neueste Django 2.2.12 und dem Ausführen eines
migrate
oder des offiziellen Skripts zum Wiederherstellen der Datenbank wurde der folgende Fehler angezeigt__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.
Hier ist mein Hack:
sqlite3 my_db.db .dump > my_db.sql
__old" ("id")
durch" ("id") DEFERRABLE INITIALLY DEFERRED
sqlite3 my_db.db < my_db.sql
quelle
Schritte:
Deinstallieren Sie den aktuellen Django von Ihrem ENV. Löschen Sie einfach den Ordner "anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django aller Versionen". * Hinweis: Nur für Anaconda-Benutzer sollten andere Benutzer herausfinden, wie ein Paket von Ihrem ENV deinstalliert werden kann.
Gehen Sie zu Github.com/django/django.
Laden Sie das Repo als Zip-Datei herunter.
Reißverschluss extrahieren.
Wechseln Sie zu Ihrem ENV.
Geben Sie den extrahierten Ordner ein.
Führen Sie "python setup.py install" aus und installieren Sie Django.
Löschen Sie Ihre vorherige Datei db.sqlite3. Wenden Sie nun die Migrationen erneut an, um eine neue Datei db.sqlite3 zu erstellen.
* Hinweis: Ich weiß nicht, wie ich die vorherige Datenbankdatei reparieren und Datenverlust verhindern kann. Also sag es mir bitte, wenn du es weißt.
Glückwunsch! Es funktioniert jetzt gut.
Update auf den neuesten Django im Januar von der offiziellen Django-Veröffentlichung.
quelle
Ich hatte das gleiche Problem, außer dass ich 2 SQLite-Datenbanken und einen benutzerdefinierten Datenbank-Router hatte. Ich habe es geschafft, es zum Laufen zu bringen, indem ich Django auf 1.11.20 heruntergestuft habe und die Datenbanken nicht neu erstellen mussten.
quelle
Für diejenigen, die diesen Fehler mit den obigen Antworten nicht beheben können, kann dieser Fehler auftreten, wenn Sie Ihre App mit dem Namen "main" erstellt haben. Versuchen Sie also, Ihren App-Namen "main" in einen anderen zu ändern.
quelle
Sie müssen Django aktualisieren. Dieses Problem wurde in dieser PR https://github.com/django/django/pull/10733 behoben
quelle
Ich habe das Problem gelöst, indem ich einige meiner Modelle geändert habe. Ich hatte ein benanntes Projekt und ein benanntes Projekt. Die Datenbanktabellen wurden verwirrt und warfen mir diesen Fehler.
quelle
Ich habe dieses Problem wie folgt gelöst:
1) Löschen Sie die Datei db.sqlit3
2) Das App-Verzeichnis löscht alles im Pycache
3) Verwalten von.py-Makemigrationen, Verwalten.Py-Migrieren, Verwalten.Py erstellt Superuser und dann Verwalten.Py-Runserver.
quelle
Ich hatte das gleiche Problem und habe es wie folgt behoben:
1) Holen Sie sich die neueste
django
Version2) Holen Sie sich die neueste
SQL Lite
Version3) Löschen Sie die
db.sqlite3
Datei aus Ihrem Projekt4) Nehmen Sie eine kleine Änderung an
models.py
(z. B. ändern Sie die Größe eines Feldes)5) Generieren Sie eine neue
db.sqllite3
Datei, indem Siemakemigrations
& ausführenmigrate commands
6) Importieren Sie die neu erstellte
db.sqllite3
Datei inSQL Lite
quelle
Ich habe Django auf Version 2.2 installiert / heruntergestuft, dies hat Django 3.x entfernt
pip install django==2.2
und dann habe ich die Datei db.sqlite gelöscht und dann
Ich habe es versucht
quelle
Update Django Version: Pip installieren Django - Upgrade dann
quelle
Es gibt nur 4 Dinge, die ich in der Kommandozeile getan habe und die meine behoben haben.
py manage.py makemigrations
py manage.py migrate
py manage.py runserver
(Server starten)quelle
django-2.2.7
Das hat bei mir funktioniert -
1) Löschen Sie db.sqlite3 .
2) Löschen Sie in jeder App im Migrationsordner alles andere als __init__.py .
3) Löschen Sie in jeder App den Ordner __pycache__ .
Ich bin mir nicht sicher, ob Sie dies für alle Apps oder nur für die betreffende App tun mussten, aber das hat bei mir funktioniert.
quelle
migrations
Dateien lohnt sich, um diese Art von Problemen zu lösen. @rajvijay