web-dev-qa-db-fra.com

Django - Aucune table de ce type: main.auth_user__old

Je suivais les premier tutoriel d'application des documents officiels Django et j'ai eu cette erreur en essayant de sauvegarder certaines modifications apportées via la page d'administration. J'ai fait quelques recherches à ce sujet, mais les solutions possibles que j'ai pu trouver, telles que la migration de la base de données, ne fonctionneront tout simplement pas. Faites le moi savoir si vous voulez voir une partie spécifique de mon code.

Ce qui suit est une erreur:

OperationalError dans/admin/polls/question/1/change/no table: main.auth_user__old Méthode de demande: POST URL de la demande: http://127.0.0.1:8000/admin/polls/question/1/change / Django Version: 2.1.4 Type d'exception: OperationalError Valeur d'exception: no table: main.auth_user__old Emplacement d'exception:/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py dans execute, ligne 296 Python exécutable:/Users/gfioravante/Projects/test_app/ta_env/bin/python3 Python Version: 3.7.1 Python Chemin:
['/ 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 '] Heure du serveur: le mercredi 5 décembre 2018 à 16h45 : 00 +0000

et le retraçage:

Environnement:

Méthode de demande: POST _ URL de la demande: http://127.0.0.1:8000/admin/polls/question/1/change/

Version Django: 2.1.4 Python Version: 3.7.1 Applications installées: ['polls.apps.PollsConfig', 'Django.contrib.admin', 'Django.contrib.auth', 'Django.contrib .contenttypes ',' Django.contrib.sessions ',' Django.contrib.messages ',' Django.contrib.staticfiles '] Middleware installé: [' 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.clickjacking.XFrameOptionsMiddleware ']

Traceback:

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" dans _execute 85. return self.cursor.execute (sql, params)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py" dans l'exécution 296. return Database.Cursor.execute (auto, requête, params)

L'exception ci-dessus (pas de table de ce type: main.auth_user__old) était la cause directe de l'exception suivante:

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/exception.py" au centre de 34. response = get_response (request)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/base.py" dans _get_response 126. response = self.process_exception_by_middleware (e, request)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/base.py" dans _get_response 124. réponse = wrapped_callback (demande, * callback_args, ** callback_kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py" dans l'emballage 604. return self.admin_site.admin_view (view) (* args, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py" dans _wrapped_view 142. response = view_func (request, * arguments, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/views/decorators/cache.py" dans _wrapped_view_func 44. response = view_func (request, * arguments, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/sites.py" en 223 intérieur. Voir la vue de retour (request, * args, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py" dans la vue_changement 1640. return self.changeform_view (demande, object_id, form_url, extra_context)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py" dans _wrapper 45. return bound_method (* args, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py" dans _wrapped_view 142. response = view_func (request, * arguments, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py" dans changeform_view 1525. return self._changeform_view (request, object_id, form_url, extra_context)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py" dans _changeform_view 1571. self.log_change (request, new_object, change_message)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py" dans log_change 826. change_message = message,

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/models.py" dans l’opération log_action 35. change_message = change_message,

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/manager.py" dans manager_method 82. return getattr (self.get_queryset (), nom) (*) args, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/query.py" dans la création 413. obj.save (force_insert = True, à l'aide de = self.db )

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py" de la sauvegarde 718. force_update = force_update, update_fields = update_fields)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py" dans save_base 748. updated = self._save_table (raw, cls, force_insert, force_upert, force_update , using, update_fields)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py" dans _save_table 831. result = self._do_insert (cls._base_manager, using, fields , update_pk, raw)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py" dans _do_insert 869. using = using, raw = raw)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/manager.py" dans manager_method 82. return getattr (self.get_queryset (), nom) (*) args, ** kwargs)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/query.py" dans _insert 1136. return query.get_compiler (using = using) .execute_sql (return_id) )

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/sql/compiler.py" dans execute_sql 1289. cursor.execute (sql, params)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" dans l'exécution 100. return super (). Execute (sql, params)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" à exécuter 68. return self._execute_with_wrappers (sql, paramètres, many = False, executor = self._execute)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" dans _execute_with_wrappers 77. return executor (sql, paramètres, beaucoup, contexte)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" dans _execute 85. return self.cursor.execute (sql, params)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/utils.py" dans exit 89. soulève dj_exc_value.with_traceback (traceback) à partir de exc_value

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py" dans _execute 85. return self.cursor.execute (sql, params)

Fichier "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py" dans l'exécution 296. return Database.Cursor.execute (auto, requête, params)

Type d'exception: OperationalError dans/admin/polls/question/1/change/Exception Valeur: aucune table de ce type: main.auth_user__old

43
NorthernSage

Je viens de découvrir cela moi-même, il semble y avoir un lien avec https://code.djangoproject.com/ticket/29182 . Pour l'instant, vous pouvez simplement rétrograder votre version de sqlite à une version antérieure à la version 2.6 (par exemple, 2.5.1).

28
BenM

Le problème est dû au comportement modifié de l'instruction ALTER TABLE RENAME dans SQLite 3.26.0 (voir compatiblity note ). Ils ont également introduit l'instruction PRAGMA legacy_alter_table = ON afin de maintenir la compatibilité avec les versions précédentes. La prochaine Django release 2.1.5 utilise la déclaration mentionnée précédemment comme correctif. C'est prévu pour le 1er janvier 2019.

5
Imre Kis

aller à ce dossier Django/db/backends/sqlite3

sauvegarder le fichier 'schema.py' dans un autre dossier

ouvrez le fichier schema.py d'origine dans un éditeur de texte

là, vous pouvez voir un extrait de code comme

    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__()

commentez-les et collez l'extrait de code suivant

     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__()

Cela a fonctionné pour moi. (la sauvegarde pour schema.py est au cas où le travail irait mal; D)

pour plus d'informations

https://github.com/Django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5b959533bd6d7ef

merci

4

La même chose m'est arrivé, très frustrant. J'utilise anaconda pour mes environnements. J'ai constaté que je ne pouvais pas supprimer sqlite sans réinstaller immédiatement la version la plus récente de sqlite. Essayer une version plus ancienne de Django ne semblait pas non plus fonctionner. La seule solution qui a fonctionné pour moi consiste à utiliser une base de données PostgreSQL. Ce n'est certainement pas idéal, mais je prévois d'utiliser la base de données PostgreSQL dans le futur, ce n'est donc pas une perte de temps totale. Si vous vous trouvez au même endroit que moi alors cette video peut être utile si vous voulez savoir comment connecter la base de données PostgreSQL à votre projet Django.

Vous devrez installer la base de données postgreSQL avant d’apporter les modifications dans settings.py. Pour l’installation, il suffit de cliquer sur Suivant pour accéder à toutes les options. Cependant, rappelez-vous le nom d'utilisateur et le mot de passe que vous utilisez lors de l'installation.

2
Ithomson90

Ce que vous pouvez faire, c'est simplement accéder à la base de données à l'aide du navigateur sqlite3 et modifier la table de référence à l'aide de l'attribut correspondant d'auth_user__old à auth_user. Cela a fonctionné pour moi et mon projet fonctionne bien.

0
Hritik kumar

J'ai résolu le problème en mettant à jour Django de 2.1.4 à 2.1.5, mais je devais reconstruire le projet à nouveau, car le bogue semble être lié aux objets que j'ai insérés dans la base de données en utilisant l'ancienne version de Django.

0
Tms91

si vous ne voulez pas changer votre version de Django, alors Database doit être le changement . Utilisez mes recommandations PostgreSQL ™ .. Le problème serait résolu après makemigrations et migrate.

0
Prosenjit

Éliminez facilement ce problème en maintenant les étapes suivantes:

  1. gardez Django version 2.1.5 (le problème traité dans cette version) pip install Django==2.1.5
  2. Supprimer la base de données SQLite
  3. Migrez à nouveau python manage.py makemigrations puis python manage.py migrate
  4. Démarrer le serveur python manage.py runserver

TERMINÉ!

0
nurealam siddiq

Veuillez rétrograder la version de Django vers la version 1.5 ou si vous ne souhaitez pas rétrograder la version, vous pouvez modifier schema.py localement, appliquer un correctif et exécuter la commande makemigrations + migrate mais ce n'est pas recommandé.

0
Mahesh Karia

J'ai eu le même problème, sauf que j'avais 2 bases de données sqlite et routeur de base de données personnalisé. J'ai réussi à le faire fonctionner en rétrogradant Django à 1.11.20 sans qu'il soit nécessaire de recréer les bases de données.

0

Je suis super excité parce que c'est la première fois que je me sens à l'aise pour répondre à une question. 

Je vois que vous avez déjà réussi à le réparer, mais pour les autres qui ne souhaitent pas rétrograder un logiciel, vous pouvez aller dans votre fichier settings.py et dans le dict DATABASES, vous pouvez remplacer .sqlit3 par .postgresql et juste en dessous le db.sqlit3 à db.sql. Cela change votre base de données par défaut en utilisant postgreSQL. 

Pour ce faire, vous devrez pip install psycopg2.

Supprimez votre fichier db.sqlite3 (si vous en avez un/ne vous souciez pas de perdre son contenu) et tout ce qui n'est pas le fichier __init__.py dans le dossier de migration de votre application. Une fois que vous avez fait tout cela, vous pouvez exécuter python manage.py makemigrations et python manage.py migrate et ensuite cela devrait fonctionner :) 

J'espère que j'ai pu aider quelqu'un!

0
Ziiik

J'ai juste essayé de résoudre le problème en utilisant la dernière version de Django mais le problème demeure . Jusqu'au moment où ils ne déboguent pas ce problème avec Django et Sqlite3 utilisent les anciennes versions de Django. Vous pouvez envisager d'utiliser la version 1.10.5 (en utilisant la commande pip install --upgrade Django == 1.10.5)

0
Mohammad Fraz

Pour ceux qui ne peuvent pas résoudre cette erreur avec les réponses ci-dessus, si vous avez créé votre application avec son nom "principal", cette erreur peut survenir à cause du même problème de nom d'application. Essayez donc de changer le nom de votre application "principal" en un autre.

0
Jinho Park

Pas:

  1. Désinstallez Django en cours de votre ENV. Supprimez simplement le dossier "anaconda3/envs/yourenv/lib/python3.7/site-packages/Django toutes versions ..." .

  2. Allez sur Github.com/Django/django.

  3. Téléchargez le référentiel sous forme de fichier Zip.

  4. Extrait Zip.

  5. Basculez vers votre ENV.

  6. Entrez le dossier extrait.

  7. Lancez "python setup.py install" et installez Django.

  8. Supprimez votre fichier db.sqlite3 précédent. Appliquez à nouveau les migrations pour créer un nouveau fichier db.sqlite3.

* Remarque: je ne sais pas comment corriger le fichier de base précédent et éviter la perte de données. Alors s'il vous plaît dites-moi si vous savez.

  1. Run Server.

Félicitations! Cela fonctionne bien maintenant.

Mise à jour de la dernière version de Django en janvier à partir de la version officielle de Django.

0
Amar Nath