Django – No hay tal tabla: main.auth_user__old

Estaba siguiendo el primer tutorial de la aplicación de los documentos oficiales de Django y obtuve este error al intentar guardar algunos cambios realizados a través de la página de administración. Hice algunas investigaciones al respecto, pero las posibles soluciones que pude encontrar, como migrar el db, simplemente no funcionarán. Solo avísame si quieres ver una parte específica de mi código.

El siguiente es un error:

OperationalError en / admin / polls / question / 1 / change / no tal tabla: main.auth_user__old Método de solicitud: POST URL de solicitud: http://127.0.0.1:8000/admin/polls/question/1/change/ Versión Django: 2.1.4 Tipo de excepción: Valor de excepción de OperationalError: no existe tal tabla: main.auth_user__old Ubicación de la excepción: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base .py en ejecutar, línea 296 Ejecutable de Python: / Users / gfioravante / Projects / test_app / ta_env / bin / python3 Versión de Python: 3.7.1 Ruta de Python:
[‘/ 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 ‘] Hora del servidor: mié, 5 de diciembre de 2018 16:45:00 +0000

y el rastreo:

Ambiente:

Método de solicitud: POST URL de solicitud: http://127.0.0.1:8000/admin/polls/question/1/change/

Versión de Django: 2.1.4 Versión de Python: 3.7.1 Aplicaciones instaladas: [‘polls.apps.PollsConfig’, ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django .contrib.sessions ‘,’ django.contrib.messages ‘,’ django.contrib.staticfiles ‘] Middleware instalado: [‘ django.middleware.security.SecurityMiddleware ‘,’ django.contrib.sessions.middleware.SessionMiddleware ‘,’ django .middleware.common.CommonMiddleware ‘,’ django.middleware.csrf.CsrfViewMiddleware ‘,’ django.contrib.auth.middleware.AuthenticationMiddleware ‘,’ ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘]

Rastrear:

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en _execute 85. return self.cursor.execute (sql, params)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py” en la ejecución 296. volver Database.Cursor.execute (por cuenta propia, consulta, params)

La excepción anterior (no existe tal tabla: main.auth_user__old) fue la causa directa de la siguiente excepción:

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py” en el interior 34. response = get_response (solicitud)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py” en _get_response 126. response = self.process_exception_by_middleware (e, request)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py” en _get_response 124. response = wrapped_callback (request, * callback_args, ** callback_kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” en el envoltorio 604. return self.admin_site.admin_view (view) (* args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” en _wrapped_view 142. response = view_func (request, * args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py” en _wrapped_view_func 44. response = view_func (request, * args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py” en el interior 223. vista de retorno (request, * args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” en change_view 1640. return self.changeform_view (request, object_id, form_url, extra_context)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” en _wrapper 45. return bound_method (* args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py” en _wrapped_view 142. response = view_func (request, * args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” en changeform_view 1525. return self._changeform_view (request, object_id, form_url, extra_context)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” en _changeform_view 1571. self.log_change (request, new_object, change_message)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py” en log_change 826. change_message = mensaje,

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py” en log_action 35. change_message = change_message,

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py” en manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py” en create 413. obj.save (force_insert = True, using = self.db )

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” en el guardado 718. force_update = force_update, update_fields = update_fields)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” en save_base 748. updated = self._save_table (raw, cls, force_insert, force_update , utilizando, update_fields)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” en _save_table 831. result = self._do_insert (cls._base_manager, using, fields , update_pk, raw)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py” en _do_insert 869. using = using, raw = raw)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py” en manager_method 82. return getattr (self.get_queryset (), name) (* args, ** kwargs)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py” en _insert 1136. return query.get_compiler (using = using) .execute_sql (return_idq) )

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py” en execute_sql 1289. cursor.execute (sql, params)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en execute 100. return super (). Execute (sql, params)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en la ejecución 68. return self._execute_with_wrappers (sql, params, many = False, ejecutor = self._execute)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en _execute_with_wrappers 77. return ejecutor (sql, params, many, context)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en _execute 85. return self.cursor.execute (sql, params)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py” en la salida 89. levante dj_exc_value.with_traceback (traceback) desde exc_value

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py” en _execute 85. return self.cursor.execute (sql, params)

Archivo “/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py” en la ejecución 296. volver Database.Cursor.execute (por cuenta propia, consulta, params)

Tipo de excepción: Error operacional en / admin / polls / question / 1 / change / Exception Value: no existe tal tabla: main.auth_user__old

Acabo de encontrar esto, parece estar relacionado con https://code.djangoproject.com/ticket/29182 . Por ahora, simplemente puede degradar su versión de sqlite a una versión anterior a 2.6 (por ejemplo, 2.5.1)

El problema se debe al comportamiento modificado de la ALTER TABLE RENAME en SQLite 3.26.0 (ver nota de compatibilidad ). También introdujeron la statement PRAGMA legacy_alter_table = ON para mantener la compatibilidad con versiones anteriores. La próxima versión 2.1.5 de Django utiliza la statement mencionada anteriormente como una revisión. Se espera para el 1 de enero de 2019.

Me ha pasado lo mismo, muy frustrante. Utilizo anaconda para mis entornos, descubrí que no podía eliminar sqlite sin volver a instalar inmediatamente la versión más actualizada de sqlite. Probar una versión anterior de django tampoco parece funcionar. La única solución que me ha funcionado es mediante el uso de una base de datos PostgreSQL. Ciertamente no es lo ideal, pero estoy planeando utilizar la base de datos PostgreSQL en el futuro, por lo que no fue una completa pérdida de tiempo. Si se encuentra en el mismo lugar en el que estaba, este video puede ser útil si desea saber cómo conectar la base de datos PostgreSQL con su proyecto django.

Tendrá que instalar la base de datos postgreSQL antes de realizar los cambios en settings.py, la instalación es más o menos al hacer clic en Siguiente en todas las opciones. Sin embargo, recuerde el nombre de usuario y la contraseña que utiliza durante la instalación.

vaya a esta carpeta django / db / backends / sqlite3

copia de seguridad del archivo ‘schema.py’ en otra carpeta

abre el schema.py original en un editor de texto

Allí puedes ver un fragmento de código como

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

Coméntalos y pega el siguiente fragmento de código

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

Esto funcionó para mí. (La copia de seguridad para schema.py es en caso de que el trabajo salga mal; D)

para más información

https://github.com/django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef

gracias

Si no quieres cambiar tu versión de Django, entonces la base de datos tiene que ser el cambio. Utiliza mis recomendaciones de PostgreSQL. El problema se resolvería después de migraciones y migraciones.

Pasos:

  1. Desinstala el Django actual de tu ENV. Simplemente elimine la carpeta “anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django todas las versiones .. * Nota: Solo para usuarios de Anaconda, otros usuarios deben averiguar cómo desinstalar un paquete de su ENV.

  2. Vaya a Github.com/django/django.

  3. Descarga el repository como archivo zip.

  4. Extraer zip.

  5. Cambie a su ENV.

  6. Entra en la carpeta extraída.

  7. Ejecute “python setup.py install” e instale Django.

  8. Borre su archivo db.sqlite3 anterior. Ahora aplique las migraciones nuevamente para crear un nuevo archivo db.sqlite3.

* Nota: No sé cómo arreglar el archivo db anterior y evitar la pérdida de datos. Así que por favor dime si lo sabes.

  1. Ejecutar servidor.

Felicidades Funciona bien ahora.

Actualización a la última versión de Django en enero desde el lanzamiento oficial de Django.

Estoy súper emocionado porque esta es la primera vez que me siento cómodo respondiendo una pregunta.

Veo que ya logró arreglarlo, pero para otros que no quieran degradar ningún software, puede ingresar a su archivo settings.py y en el .sqlit3 DATABASES , puede reemplazar .sqlit3 con .postgresql , y justo debajo, cambia el db.sqlit3 a db.sql . Esto cambia su db por defecto a usar postgreSQL.

Al hacerlo, necesitarás pip install psycopg2 .

Elimine su archivo db.sqlite3 (si tiene uno / no le importa perder lo que __init__.py ) y todo lo demás que no sea el archivo __init__.py en la carpeta de migración de su aplicación. Una vez que haya hecho todo eso, puede ejecutar python manage.py makemigrations y python manage.py migrate y luego debería funcionar 🙂

Espero haber podido ayudar a alguien!

Intenté resolver el problema usando la última versión de Django, pero el problema sigue siendo el mismo. Hasta el momento en que no solucionen este problema con Django y Sqlite3 usa las versiones anteriores de Django. Puedes considerar usar la versión 1.10.5 (usando el comando pip install –upgrade django == 1.10.5)

Resolví el problema actualizando Django de 2.1.4 a 2.1.5, pero tuve que reconstruir el proyecto nuevamente, porque el error parece estar relacionado de alguna manera con los objetos que inserté en la base de datos utilizando la versión antigua de Django.

Tuve el mismo problema, excepto que tenía 2 bases de datos sqlite y un enrutador de base de datos personalizado. Logré que funcionara al degradar Django a 1.11.20 y no fue necesario recrear las bases de datos.

Sí, tengo el mismo error en Django 2.1.4

Error operacional (No existe tal tabla: main.auth_user__old)

He eliminado Django 2.1.4, instale Django 1.11.16, el problema se resolvió

Instalar Django 1.11.16 no es útil para mí. Mostrará “ModuleNotFoundError” y “FileNotFoundError”. Luego abro el archivo “db.sqlite3”, copio la tabla “auth_user” y “django_content_type” con la estructura y los datos, cambio el nombre de la tabla a “auth_user__old” y “django_content_type__old”. ¡Funcionó! Espero que sea útil a los confundidos.

Por favor, cambie la versión de django a 1.5 o, en caso de que no desee cambiar la versión, puede cambiar schema.py localmente, aplicar el parche y ejecutar el comando makemigrations + migrate, pero no se recomienda.

Abrir => / YourAppFolder / migrations / U vería que los archivos de migración, como ‘ 0001_initial.py ‘, eliminen todos estos archivos. Y ejecute el siguiente comando 1- python manage.py makemigrations 2- python manage.py migrate Hope, debe resolver su problema 🙂

Hay solo 4 cosas que hice en la línea de comando y me arreglé la mía.

  1. Ctrl + C (detener servidor)
  2. py manage.py makemigrations
  3. py manage.py migrate
  4. py manage.py runserver (iniciar servidor)