为单个 Django 1.7 应用程序重新创建表
Posted
技术标签:
【中文标题】为单个 Django 1.7 应用程序重新创建表【英文标题】:Recreate the tables for a single Django 1.7 app 【发布时间】:2015-11-18 01:04:23 【问题描述】:很多个月前,我使用了诸如./manage.py reset appname
到DROP
之类的命令,然后为单个应用程序重新创建数据库表。当其他开发人员无意中手动破坏了数据库中的某些内容并且您希望在不影响其他应用程序的情况下重新设置内容(或需要经历漫长的转储/加载过程)时,这非常方便。
Django 1.7 的出现及其内置迁移支持似乎已经删除并重命名了许多这些命令,我对文档中的所有共享前缀感到好奇。谁能帮我把这个拼出来?
如何为单个应用程序(带有迁移的应用程序)重置表?
【问题讨论】:
可能duplicate。该命令已重命名为刷新。这不适用于一个应用程序。 this 是一个支持一个应用的重置的反向移植 如果不是太坏了我想你可以manage.py migrate <app> zero
。
@spectras 那(连同标准迁移)完美地完成了这项工作。提交答案,我会接受。
【参考方案1】:
如果您的 Django 迁移子系统本身没有损坏,重置应用的正常方法是运行 manage.py migrate <app> zero
。
这将向后运行应用程序的所有迁移,因此有几点值得注意:
如果应用程序的某些迁移不可逆,则该过程将失败。不应正常发生,因为 Django 只会创建可逆迁移。不过,您可以自己构建不可逆的 - 通常在您创建数据迁移时。
如果其他应用程序依赖于该应用程序,它也将向后迁移到不依赖于它的最后一次迁移。
然后您可以再次运行 migrate,因此它会向前运行。
在任何情况下,请记住迁移会给您的数据带来风险,因此请先备份您的数据库,然后再进行任何操作。
【讨论】:
以上是关于为单个 Django 1.7 应用程序重新创建表的主要内容,如果未能解决你的问题,请参考以下文章
Heroku 上的 Django 1.7:如何让 makemigrations 重新扫描数据库?