Breve: use Django Shell para borrar tablas de bases de datos

abreviatura
Utilice Django Shell para borrar todas las tablas de la base de datos

Blog de jcLee95 : https://blog.csdn.net/qq_28550263

Dirección de este artículo : https://blog.csdn.net/qq_28550263/article/details/132862795



1. Descripción

Hubo un problema con Django al intentar crear la tabla de la base de datos al intentar ejecutar python enable.py migrar debido a un estado confuso del historial de migración. El mensaje de error menciona que falta una tabla django_content_type, que es la tabla que Django usa para rastrear el ContentType de un modelo.

La información general del error es la siguiente:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:
  No migrations to apply.
Traceback (most recent call last):
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: django_content_type

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\desktop\jcmusic\manage.py", line 22, in <module>
    main()
  File "D:\desktop\jcmusic\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Python311\Lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "C:\Python311\Lib\site-packages\django\core\management\__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python311\Lib\site-packages\django\core\management\base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python311\Lib\site-packages\django\core\management\base.py", line 448, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\core\management\base.py", line 96, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\core\management\commands\migrate.py", line 376, in handle
    emit_post_migrate_signal(
  File "C:\Python311\Lib\site-packages\django\core\management\sql.py", line 52, in emit_post_migrate_signal
    models.signals.post_migrate.send(
  File "C:\Python311\Lib\site-packages\django\dispatch\dispatcher.py", line 176, in send
    return [
           ^
  File "C:\Python311\Lib\site-packages\django\dispatch\dispatcher.py", line 177, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\contrib\auth\management\__init__.py", line 51, in create_permissions
    create_contenttypes(
  File "C:\Python311\Lib\site-packages\django\contrib\contenttypes\management\__init__.py", line 127, in create_contenttypes
    content_types, app_models = get_contenttypes_and_models(
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\contrib\contenttypes\management\__init__.py", line 98, in get_contenttypes_and_models
    content_types = {
                    ^
  File "C:\Python311\Lib\site-packages\django\db\models\query.py", line 394, in __iter__
    self._fetch_all()
  File "C:\Python311\Lib\site-packages\django\db\models\query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\models\query.py", line 87, in __iter__
    results = compiler.execute_sql(
              ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
    cursor.execute(sql, params)
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 102, in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "C:\Python311\Lib\site-packages\django\db\utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Python311\Lib\site-packages\django\db\backends\utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
    return Database.Cursor.execute(self, query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.OperationalError: no such table: django_content_type

Decidí usar Django Shell para borrar la tabla de la base de datos. Registre el proceso.

2. Pasos

Copia de seguridad de datos importantes

Antes de realizar la limpieza, asegúrese de haber realizado una copia de seguridad de todos los datos importantes utilizando diversos medios y luego borre todas las tablas de la base de datos.

Ingrese al shell de Django

python manage.py shell

Introduzca el guión

Copie el script de eliminación de tablas escrito a continuación en el shell interactivo y presione Entrar para iniciar la ejecución.

from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = cursor.fetchall()
for table in tables:
    cursor.execute(f"DELETE FROM {
      
      table[0]};")

Luego ingrese la función de salida para salir del entorno Django Shell.

exit()

Bien, ahora puedes recrear las migraciones y las tablas de la base de datos:

python manage.py makemigrations
python manage.py migrate

Supongo que te gusta

Origin blog.csdn.net/qq_28550263/article/details/132862795
Recomendado
Clasificación