Django - No existe tal tabla: main.auth_user__old

82

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. Investigué un poco al respecto, pero las posibles soluciones que pude encontrar, como migrar la base de datos, simplemente no funcionarán. Avísame si quieres ver alguna parte específica de mi código.

A continuación se muestra el error:

OperationalError en / admin / polls / question / 1 / change / no existe 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 de Django: 2.1.4 Tipo de excepción: OperationalError Valor de excepción: 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 ejecución, línea 296 Python Ejecutable: / 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ércoles, 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 ',' django.contrib.messages.middleware.MessageMiddleware ',' djangoOpiddleware.MessageMiddleware ',' djangoOpiddleware ']

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 ejecución 296. return Database.Cursor.execute (self, query, 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 = wrap_callback (solicitud, * callback_args, ** callback_kwargs)

Archivo "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" en el contenedor 604. return self.admin_site.admin_view (ver) (* 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 (solicitud, * 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 (solicitud, * args, ** kwargs)

Archivo "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py" en la vista 223. return interna (solicitud, * 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 (solicitud, * 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 = message,

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 (), nombre) (* argumentos, ** 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, usando = self.db )

Archivo "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" en save 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 , usando, 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, sin procesar)

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 (), nombre) (* argumentos, ** kwargs)

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

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 ejecución 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 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. Aumente 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 ejecución 296. return Database.Cursor.execute (self, query, params)

Tipo de excepción: OperationalError en / admin / polls / question / 1 / change / Valor de excepción: no existe tal tabla: main.auth_user__old

NorthernSage
fuente
Si no tiene datos, simplemente elimínelos y vuelva a migrar. Si no es posible, hágalo python manage.py showmigrationspara ver qué migraciones no se han realizado
programación del

Respuestas:

52

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

bmildren
fuente
7
Se ha comprometido una solución para el problema, y ​​se incluirá en las próximas versiones 2.1.5 (prevista para el 1 de enero de 2019) y 2.0.10 (fecha de lanzamiento por determinar).
Alasdair
7
¿No es tan fácil degradar el sistema macOS sqlite3 o me falta algo aquí? Mi solución es instalar github / master django (donde esto está arreglado).
Alper
1
@Alper Desinstalé el django actual y luego instalé django desde GitHub. el error aún persiste y no pude degradar sqlite3 en mi macOS (por ejemplo, usando brew install [email protected]) ¿Alguna idea?
Hatzil
5
Después de la actualización, asegúrese de eliminar la base de datos y reconstruirla con el comando de migraciones.
Mitsjol
9
@Alvaro El error se corrigió en Django 2.1.5
Selcuk
49

Deshazte de este problema fácilmente manteniendo los siguientes pasos:

  1. mantener django versión 2.1.5 (el problema resuelto en esta versión) pip install django==2.1.5
  2. Eliminar la base de datos SQLite
  3. Migrar de nuevo python manage.py makemigrationsy luegopython manage.py migrate
  4. Inicie el servidor python manage.py runserver

¡HECHO!

nurealam siddiq
fuente
1
Esto funcionará perfectamente, pero suponga que no desea eliminar el archivo sqlite db.
Philip Mutua
1
esto funciona incluso sin eliminar el sqlite db (pero aún así migrar). estaba trabajando en proyectos antiguos con 2.0.4
izzulmakin
Gracias, esto funciona bien. Estoy usando la versión 2.0.7 y tengo un problema para guardar datos en el administrador.
xreyc_developer22
14

Acabo de hacer esto y resolvió el problema:

pip install Django --upgrade

Entonces:

python manage.py migrate

python manage.py makemigrations app

python manage.py migrate
zurbaranf
fuente
10

El problema es causado por el comportamiento modificado de la ALTER TABLE RENAMEdeclaración en SQLite 3.26.0 (ver nota de compatibilidad ). También introdujeron la PRAGMA legacy_alter_table = ONdeclaración para mantener la compatibilidad con versiones anteriores. La próxima versión 2.1.5 de Django utiliza la declaración mencionada anteriormente como revisión. Se espera el 1 de enero de 2019.

Imre Kis
fuente
10

Esto es lo que hice para resolver este problema:

  1. Vaya al entorno virtual e instale [email protected]

    pip install django==2.1.7
    
  2. Elimina el db.sqlite3archivo en tu carpeta raíz.

  3. Crea el nuevo db.sqlite3en tu carpeta raíz.
  4. Vuelva a ejecutar las migraciones:

    python3 manage.py makemigrations
    
    python3 manage.py migrate
    

Ahora debería estar funcionando bien.

MING WU
fuente
"eliminar el archivo db.sqlite3 en su carpeta raíz" es la clave ~ ejecutar python3 manage.py makemigrations creará un nuevo archivo sqlite3.
Jerome
Por alguna razón, eliminar el sqlite no solo funcionó, también intenté eliminar las migraciones de pycache + (apenas estoy aprendiendo Django), luego funcionó para mí.
Anshuman Kumar
9

vaya a esta carpeta django / db / backends / sqlite3

schema.pyarchivo de copia de seguridad en otra carpeta

abre el schema.py original en un editor de texto

allí puede 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éntelos y pegue 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 de 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

Namal Jayasundara
fuente
Usé esta solución para django 1.11, excepto que solo tuve que agregar la línea "c.execute ('PRAGMA legacy_alter_table = ON')" después de "c.execute ('PRAGMA Foreign_keys = 0')" y eso lo solucionó.
n00b
2
Estoy en medio de un tutorial que requiere django 2.0.7. Esta solución funciona :)
Bisonbleu
@Bisonbleu Creo que estoy en medio del mismo tutorial. Pero la solución no funcionó para mí. ¿Podrías explicar lo que hiciste?
code_life
2
@unathletic_coder como se sugiere en la respuesta de Namal Jayasundara, fui a /project_name/lib/python3.7/site-packages/django/db/backends/sqlite3/schema.py en la línea 21 que comienza con: def __enter __ (self): y reemplazó el código existente con las 3 líneas de código sugeridas. Estoy haciendo youtube.com/watch?v=F5mRW0jo-U4
Bisonbleu
6

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

Tms91
fuente
1
en ese caso, el comando migrate y makemigrations es suficiente para el nuevo django.
Pravin RGMishra
5
  1. Primero, detenga el servidor y elimine db.sqlite3.
  2. Luego, debe ejecutar: python manage.py makemigrations python manage.py migrate
  3. Después de ejecutar este comando, debe crear un superusuario. Para crear superusuario, ejecute: python manage.py createduperuser Ingrese los detalles de superusuario allí.
  4. Ejecute su servidor de nuevo.

Ahí tienes.

Milán Adhikari
fuente
5

para mí, fue de mi versión de django (que era 2.1) instalar una versión superior (usé 2.1.5 por algunas razones) ** eliminar db.sqlite3, y todo en la carpeta de migración excepto el comando 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
Arsham
fuente
4

A mí me ha pasado lo mismo, muy frustrante. Utilizo anaconda para mis entornos, descubrí que no podía eliminar sqlite sin reinstalar inmediatamente la versión más actualizada de sqlite. Probar una versión anterior de django tampoco pareció funcionar. La única solución que me ha funcionado es utilizar una base de datos PostgreSQL. Ciertamente no es 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 que yo, este video puede ser útil si desea saber cómo conectar la base de datos PostgreSQL con su proyecto django.

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

Ithomson90
fuente
3

Porque el problema y la solución anteriores es:

1) Vaya a la terminal y escriba pip install django==2.1.7 o la última versión de django

2) Después de la instalación, en el terminal escriba python manage.py makemigrationsy luegopython manage.py migrate

3) En la terminal, inicie el servidor con código python manage.py runserver

4) Inicie sesión en el servidor de administración con la contraseña y agregue el producto, se agregará correctamente el producto.

Aravind Krishna Saravu
fuente
¡Bienvenido a Stack Overflow! Por favor, revele cualquier afiliación y no use el sitio como una forma de promocionar su sitio mediante publicaciones. Consulte ¿Cómo escribo una buena respuesta? .
2

Para otros que no quieran degradar ningún software, pueden dirigirse a su settings.pyarchivo y, en el DATABASESdict, puede reemplazar .sqlit3con .postgresql, y justo debajo de él, cambiar db.sqlit3adb.sql . Esto cambia su base de datos predeterminada para usar postgreSQL.

Al hacerlo, necesitará pip install psycopg2 .

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

¡Espero haber podido ayudar a alguien!

Ziiik
fuente
2
PostgreSQL también necesita estar instalado para que esto funcione para cualquiera que no pueda entender por qué está recibiendo errores de conexión después de hacer todo esto. :)
Gilbert
¿psycopg2 no es PostgreSQL? Porque eso explicaría por qué no iniciaría un servidor para mí jaja
Ziiik
2
AFAIK psycopg2 es un adaptador para que Python se comunique con PostgreSQL, pero PostgreSQL debe instalarse por separado. Nota: Soy nuevo en Django, así que tome todo lo que diga con un grano de sal.
Gilbert
2

Open => / YourAppFolder / migrations / Vería los archivos migrados como ' 0001_initial.py ' eliminar todos estos archivos. Y ejecute el siguiente comando 1- python manage.py makemigrations 2- python manage.py migrate Hope, debe resolver su problema

Usama Nadeem
fuente
1
al final, el problema no estaba relacionado con eso, pero gracias por tomarse el tiempo.
northernSage
2

Incluso después de actualizar a la última versión de Django 2.2.12 y ejecutar migrateel script de reconstrucción de la base de datos oficial , obtuve el mismo error con __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.

Aquí está mi truco:

  1. volcar el contenido de la base de datos a sql: sqlite3 my_db.db .dump > my_db.sql
  2. ejecutar una expresión regular sobre la salida de SQL, reemplazando __old" ("id")con" ("id") DEFERRABLE INITIALLY DEFERRED
  3. eliminar el archivo de base de datos antiguo
  4. cargue el sql modificado en una nueva base de datos: sqlite3 my_db.db < my_db.sql
  5. ??? & lucro
tehfink
fuente
1

Pasos:

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

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

  3. Descargue el repositorio como archivo zip.

  4. Extraer zip.

  5. Cambie a su ENV.

  6. Ingrese a la carpeta extraída.

  7. Ejecute "python setup.py install" e instale Django.

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

* Nota: No sé cómo reparar el archivo db anterior y evitar la pérdida de datos. Así que dígame si lo sabe.

  1. Ejecute el servidor.

¡Felicidades! Funciona bien ahora.

Actualice a la última versión de Django en enero desde la versión oficial de Django.

Amar Nath
fuente
1

Tuve el mismo problema, excepto que tenía 2 bases de datos sqlite y un enrutador de base de datos personalizado. Logré que funcionara degradando Django a 1.11.20 y sin necesidad de volver a crear las bases de datos.

Kristiyan Gospodinov
fuente
1

Para aquellos que no pueden resolver este error con las respuestas anteriores, si ha hecho su aplicación con su nombre "principal", este error puede ocurrir debido al problema del mismo nombre de la aplicación. Así que intente cambiar el nombre de su aplicación "principal" por otro.

Parque Jinho
fuente
1

Resolví el problema cambiando algunos de mis modelos. Tenía un proyecto con nombre y otro con nombre. Las tablas de la base de datos se confundieron y me arrojaron este error.

Peter Smiley
fuente
1

He resuelto este problema usando a continuación:

1) Elimina db.sqlit3

2) el directorio de la aplicación elimina todo en pycache

3) manage.py makemigrations, manage.py migrate, manage.py createduperuser y luego manage.py runserver.

Yogesh Nikam Patil
fuente
1

Tuve el mismo problema y lo solucioné haciendo lo siguiente:

1) Obtenga la última djangoversión

2) obtenga la última SQL Liteversión

3) eliminar db.sqlite3archivo de su proyecto

4) Realice un pequeño cambio en models.py(por ejemplo, cambie el tamaño de un campo)

5) genere un nuevo db.sqllite3archivo ejecutando makemigrations&migrate commands

6) importe el db.sqllite3archivo recién creado aSQL Lite

Adrián Balea
fuente
1

Instalé / bajé django a la versión 2.2, esto eliminó django 3.x

pip install django==2.2

y luego eliminé el archivo db.sqlite y luego

Lo intenté

python manage.py makemigrations,
python manage.py migrate 
python manage.py creatingsuperuser. 
MbeforeL
fuente
1

actualizar la versión de django: pip install django --upgrade then

./manage.py makemigration
./manage.py migrate
./manage.py runserver

pysaundary
fuente
0

Solo hay 4 cosas que hice en la línea de comandos y 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)
Nellymandela
fuente
1
El problema ya se ha solucionado con la versión 2.1.5 (número de ticket # 29182 en la "Sesión de corrección de errores de las notas de la versión). Docs.djangoproject.com/en/2.1/releases/2.1.5/#bugfixes
northernSage
0

django-2.2.7
Esto funcionó para mí -

1) Elimina db.sqlite3 .
2) Dentro de cada aplicación, dentro de la carpeta de migraciones , elimine todo lo que no sea __init__.py .
3) Dentro de cada aplicación, elimine la carpeta __pycache__ .

No estoy seguro de si tuvo que hacerlo para todas las aplicaciones o solo para la aplicación en cuestión, pero esto funcionó para mí.

RAJVIJAY
fuente
Eliminar migrationsarchivos es una práctica que vale la pena para resolver este tipo de problemas. @rajvijay
Whale 52Hz