it-swarm.com.de

Django - Keine solche Tabelle: main.auth_user__old

Ich habe das erste App-Tutorial aus den offiziellen Django -Dokumenten verfolgt und diese Fehlermeldung erhalten, als ich versuchte, einige über die Admin-Seite vorgenommene Änderungen zu speichern. Ich habe einige Nachforschungen angestellt, aber die möglichen Lösungen, die ich gefunden habe, 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/no 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 Ausnahmespeicherort:/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py in execute, Zeile 296 Python Ausführbare Datei:/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.middleware.middleware.Message. .middleware.clickjacking.XFrameOptionsMiddleware ']

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)

Die Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py" wird ausgeführt. 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 = wrapped_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 (request, * args, ** 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 (request, * args, ** kwargs)

Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/sites.py" in der inneren 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 (request, * args, ** 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 (request, new_object, change_message)

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. updated = 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)

Die 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)

Die 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öhe 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)

Die Datei "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py" wird ausgeführt. params)

Ausnahmetyp: OperationalError unter/admin/polls/question/1/change/Ausnahmewert: keine solche Tabelle: main.auth_user__old

43
NorthernSage

Ich bin gerade auf dieses selbst gestoßen, es scheint mit https://code.djangoproject.com/ticket/29182 verwandt zu sein. Momentan können Sie Ihre Version von sqlite auf eine Version vor 2.6 (z. B. 2.5.1) herunterstufen.

28
BenM

Das Problem wird durch das geänderte Verhalten der ALTER TABLE RENAME-Anweisung in SQLite 3.26.0 verursacht (siehe Hinweis compatiblity ). Sie führten auch die Anweisung PRAGMA legacy_alter_table = ON ein, um die Kompatibilität mit früheren Versionen zu gewährleisten. Die kommende Django-Version 2.1.5 verwendet die zuvor erwähnte Anweisung als Hotfix. Es wird am 1. Januar 2019 erwartet.

5
Imre Kis

gehe in diesen Ordner Django/db/backends/sqlite3

sichern Sie die Datei 'schema.py' in einem anderen Ordner

öffnen Sie die ursprüngliche Datei schema.py in einem Texteditor

dort können Sie einen Code-Schnipsel wie sehen

    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 den folgenden Codeausschnitt 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 schema.py ist 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

dankeschön

4

Mir ist dasselbe passiert, sehr frustrierend. Ich verwende Anaconda für meine Umgebungen. Ich konnte feststellen, dass ich sqlite nicht entfernen konnte, ohne die aktuellste Version von sqlite sofort neu zu installieren. Der Versuch, eine ältere Version von Django auszuprobieren, schien auch nicht zu funktionieren. Die einzige Lösung, die für mich funktioniert hat, ist die Verwendung einer PostgreSQL-Datenbank. Das ist sicherlich nicht ideal, aber ich habe vor, die PostgreSQL-Datenbank in Zukunft zu nutzen, daher war dies keine reine Zeitverschwendung. 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. Die Installation ist bei allen Optionen mehr oder weniger. Denken Sie jedoch an den Benutzernamen und das Kennwort, die Sie während der Installation verwenden.

2
Ithomson90

Was Sie tun können, ist, dass Sie einfach mit dem sqlite3-Browser in die Datenbank gehen und die Referenzierungstabelle mit dem entsprechenden Attribut von auth_user__old in auth_user ändern. Es hat für mich funktioniert und mein Projekt funktioniert gut.

0
Hritik kumar

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.

0
Tms91

wenn Sie Ihre Django-Version nicht ändern möchten, muss Datenbank die Änderung sein.

0
Prosenjit

Befreien Sie sich von diesem Problem, indem Sie einfach die folgenden Schritte ausführen:

  1. behalte Django Version 2.1.5 (das in dieser Version behobene Problem) pip install Django==2.1.5
  2. Löschen Sie die SQLite-Datenbank
  3. Nochmals migrieren python manage.py makemigrations und dann python manage.py migrate
  4. Starten Sie den Server python manage.py runserver

ERLEDIGT!

0
nurealam siddiq

Bitte downgrade Sie die Django-Version auf 1.5 oder falls Sie die Version nicht downgraden möchten, können Sie schema.py lokal ändern, patch anwenden und den Befehl makemigrations + migrate ausführen, es wird jedoch nicht empfohlen.

0
Mahesh Karia

Ich hatte das gleiche Problem mit der Ausnahme, dass ich 2 SQLite-Datenbanken und einen benutzerdefinierten Datenbank-Router hatte. Ich habe es geschafft, indem ich Django auf 1.11.20 heruntergestuft habe und keine Notwendigkeit, die Datenbanken neu zu erstellen.

Ich bin sehr aufgeregt, weil ich mich beim ersten Mal bei der Beantwortung einer Frage wohl fühle. 

Ich habe gesehen, dass Sie das Problem bereits behoben haben, aber für andere, die keine Software downgraden möchten, können Sie Ihre settings.py-Datei aufrufen und im DATABASES -Dict .sqlit3 durch .postgresql ersetzen der db.sqlit3 bis db.sql. Dadurch wird Ihre Standard-Datenbank auf PostgreSQL umgestellt. 

Dazu müssen Sie pip install psycopg2.

Löschen Sie Ihre db.sqlite3-Datei (wenn Sie eine/haben, die den Inhalt nicht verloren hat) und alle anderen Dateien, die nicht die __init__.py-Datei im Migrationsordner Ihrer App sind. Wenn Sie all dies getan haben, können Sie python manage.py makemigrations und Python manage.py migrate ausführen. Dann sollte es funktionieren :) 

Hoffe ich konnte jemandem helfen!

0
Ziiik

Ich habe gerade versucht, das Problem mit der neuesten Version von Django zu lösen, aber das Problem bleibt immer noch bestehen .. Bis zum Zeitpunkt, zu dem dieses Problem nicht mit Django und Sqlite3 debuggt wird, verwenden Sie die älteren Versionen von Django (mit dem Befehl pip install --upgrade Django == 1.10.5)

0
Mohammad Fraz

Für diejenigen, die diesen Fehler mit den obigen Antworten nicht beheben können, kann dieser Fehler auf dasselbe Problem mit dem App-Namen zurückzuführen sein, wenn Sie Ihre App unter dem Namen "main" erstellt haben. Versuchen Sie also, Ihren App-Namen "main" in einen anderen Namen zu ändern.

0
Jinho Park

Schritte:

  1. Deinstalliere den aktuellen Django von deinem ENV. Löschen Sie einfach den Ordner "anaconda3/envs/yourenv/lib/python3.7/site-packages/Django all versions .. * Hinweis: Nur für Anaconda-Benutzer sollten andere Benutzer herausfinden, wie sie ein Paket von Ihrem ENV deinstallieren .

  2. Gehen Sie zu Github.com/Django/django.

  3. Laden Sie das Repo als ZIP-Datei herunter.

  4. Zip extrahieren.

  5. Wechseln Sie zu Ihrem ENV.

  6. Geben Sie den extrahierten Ordner ein.

  7. Führen Sie "python setup.py install" aus und installieren Sie Django.

  8. Löschen Sie Ihre vorherige db.sqlite3-Datei. Wenden Sie die Migrationen jetzt erneut an, um eine neue Datei db.sqlite3 zu erstellen.

* Hinweis: Ich weiß nicht, wie ich das vorherige DBFile korrigieren und Datenverlust verhindern kann. Also bitte sag es mir, wenn du es weißt.

  1. Server ausführen.

Glückwunsch! Es funktioniert jetzt gut.

Update auf das neueste Django im Januar von der offiziellen Django-Veröffentlichung.

0
Amar Nath