• 简记:使用 Django Shell 清空 数据库表


    简记
    使用 Django Shell 清空所有数据库表

    jcLee95的博客https://blog.csdn.net/qq_28550263

    本文地址https://blog.csdn.net/qq_28550263/article/details/132862795



    1. 描述

    由于历史的迁移历史的混乱状态导致尝试运行 python manage.py migrate 时,Django 试图创建数据库表时发生了问题。错误信息中提到了缺少 django_content_type 表,这是Django用于跟踪模型的ContentType的表。

    错误大致信息如下:

    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 
        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 
        (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    我决定使用 Django Shell 清空数据库表。记录一下过程。

    2. 步骤

    备份重要数据

    清理前,确保你使用各种手段备份过了所有重要数据,然后才清空数据库中的所有表。

    进入 Django Shell

    python manage.py shell
    
    • 1

    输入脚本

    拷贝以下写好的删表脚本到交互式Shell中,键入回车开始执行。

    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]};")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后输入exit函数退出该Django Shell环境。

    exit()
    
    • 1

    可以了,现在可以重新创建迁移和数据库表了:

    python manage.py makemigrations
    python manage.py migrate
    
    
    • 1
    • 2
    • 3
  • 相关阅读:
    期货开户寻找交易确定性
    容器是什么
    【matplotlib】matplotlib的颜色表
    数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)
    实践GoF的设计模式:迭代器模式
    python基础知识
    资源释放的方式(try - with - resource 和 try - catch - finally)
    BLISS: A Billion scale Index using Iterative Re-partitioning
    bigemap在林场的应用情况
    归并排序
  • 原文地址:https://blog.csdn.net/qq_28550263/article/details/132862795