【问题标题】:Django migrations: how to generate database from current state of the models (good old syncdb --all)Django 迁移:如何从模型的当前状态生成数据库(好旧的 syncdb --all)
【发布时间】:2015-09-21 10:07:18
【问题描述】:

通常,当我开始从事一个已经开发了一段时间的 django+south 项目时,我不会为了获得数据库的当前状态而应用所有数百个迁移。我直接去找syncdb --all,从当前模型状态创建一个数据库,然后运行migrate --fake,将所有迁移标记为通过。

几秒钟 内,我就有了一个与迁移同步的数据库。 Syncdb 加载初始固定装置。 99% 的情况下,这就是我所需要的。我很高兴。

我现在该怎么做? Syncdb 已弃用,migrate 命令没有忽略迁移的选项,只能从模型类的当前状态创建数据库。

Migrate 命令让我经历了数月的项目开发中的大量迁移。这些迁移有一些我什至不关心的奇怪错误。它也非常缓慢,好像在迁移引擎的实现中出现了问题。

我只想说:“嘿,Django,这是模型,根据模型为我创建一个数据库,然后伪造所有迁移,让我们从那里开始工作”。

我知道我可以在本地删除所有迁移,为所有应用创建首字母并应用它们,但这似乎是一个非常奇怪的解决方法,相当于 syncdb --all

我错过了什么吗?

【问题讨论】:

  • 我想您可以从您拥有的模型中重新创建迁移并运行结果。
  • pytest 正是为了运行测试而这样做的,所以这个功能显然是存在的。它只是不容易访问。

标签: django


【解决方案1】:

您可以使用--fake 标志来执行此操作。它将忽略所有通过的迁移并从现在开始迁移。像这样:

python manage.py migrate --fake

如果您想设置迁移的当前状态(例如,假设您在应用上的最后一次迁移是在 0004_... 以 0004 开头)

python manage.py migrate --fake my_app 0004

注意

也有一些选择:

python manage.py migrate --fake my_app zero

python manage.py migrate --fake-initial

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 2018-05-09
    • 2012-10-01
    • 1970-01-01
    • 2018-04-22
    • 2012-07-01
    • 2015-10-07
    • 2011-05-12
    • 2020-07-21
    相关资源
    最近更新 更多