为单个 Django 1.7 应用程序重新创建表

Recreate the tables for a single Django 1.7 app

很久以前,我使用了 ./manage.py reset appnameDROP 之类的命令,然后为单个应用程序重新创建了数据库表。当其他开发人员无意中但手动破坏了数据库中的某些内容并且您想在不影响其他应用程序的情况下重置内容(或需要经历漫长的 dump/load 过程)时,这非常方便。

Django 1.7 的出现及其内置迁移支持似乎已经删除并重命名了很多这些命令,我​​对文档中的所有共享前缀感到困惑。有人可以帮我拼写出来吗?

如何为单个应用程序(带有迁移的应用程序)重置表?

如果您的 Django 迁移子系统本身没有损坏,重置应用程序的正常方法是 运行 manage.py migrate <app> zero

这将 运行 应用程序的所有向后迁移,因此有几点值得注意:

  • 如果某些应用程序的迁移不可逆,则该过程将失败。不应该正常发生,因为 Django 只创建可逆迁移。不过,您可以自己构建不可逆的 - 通常在创建数据迁移时。

  • 如果其他应用程序依赖于此应用程序,它也会向后迁移到上次不依赖它的迁移。

然后您可以 运行 再次迁移,因此 运行 转发。

无论如何,请记住迁移会给您的数据带来风险,因此请在进行任何操作之前备份您的数据库。