在 Django 中重置迁移

Vaibhav Vaibhav 2023年1月30日
  1. 在 Django 中重置整个数据库
  2. 将 Django 应用程序恢复到其旧迁移
在 Django 中重置迁移

在使用数据库时,我们经常不得不重置数据库,因为我们用无用的数据填充它。有时,我们甚至会根据容易出错的数据库架构来设置数据库。有时,我们甚至会改变业务逻辑,从而调整整个数据库设计。这些情况在计算机科学领域很常见,并且已经构建了一些很好的工具和命令来处理它们。

在 Django 中,如果我们最终遇到任何此类情况,我们必须重置迁移和数据库。重置迁移时,列表中有几个选项。

  1. 重置整个数据库
  2. 将 Django 应用恢复到一些旧的迁移

在 Django 中重置整个数据库

当我们必须在 Django 中重置整个数据库时,列表中有几个选项。

  1. 如果我们使用 Django 的默认 SQLite 数据库,我们可以删除数据库文件 db.sqlite3,然后删除所有应用程序中的所有 migrations 文件夹。删除 migrations 文件夹后,我们可以重新进行迁移并使用两个命令迁移它们;即,python manage.py makemigrationspython manage.py migrate
  2. 如果我们使用的是其他一些关系数据库,例如 PostgreSQL 或 MySQL,我们可以使用数据库管理工具(例如 pgAdminDBeaver 等)或使用命令行手动删除所有表。或者,我们可以创建一个全新的数据库,然后将其连接到我们的 Django 项目。请注意,对于这两种情况,首先应删除所有 migrations 文件夹,然后重新进行迁移,最后再迁移它们。
  3. 另一种选择是使用 Django 的 manage.py 命令为我们清除整个数据库。命令是 python manage.py flush。同样,在使用此命令后,我们必须删除所有 migrations 文件夹,然后进行新的迁移。

将 Django 应用程序恢复到其旧迁移

如果我们不必重置整个数据库而是回滚特定 Django 应用程序的迁移,我们有两种选择。首先,我们可以将 Django 应用程序的当前迁移反向到一些旧迁移。其次,我们可以重置 Django 应用程序的所有迁移。

如果我们必须从最新的迁移(例如 0014)迁移回旧的迁移(例如 0008),我们可以使用以下命令。

python manage.py migrate AppName 0008
            --- OR ---
python manage.py migrate AppName 0008_migration_name

而且,如果我们必须重置 Django 应用程序的所有迁移,我们可以使用以下命令。

python manage.py migrate AppName zero

请注意,有时迁移可能是不可逆的。通常,当对 Django 模型进行了一些重大更改时,就会出现这种情况。当我们尝试恢复到这样的迁移时,Django 会引发一个 IrreversibleError

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.