【问题标题】:Turn off migrations in Django在 Django 中关闭迁移
【发布时间】:2014-09-29 17:58:01
【问题描述】:

这快把我逼疯了。我确定我做错了什么,但我不知道是什么。我正在开发一个 Django 项目,并且我经常需要更改一些内容以更好地适应其余部分。

直到 Django 1.6,没有问题。每当我想更改一些模型、字段等时,我都会这样做并运行syncdb。但是现在,对于迁移,syncdb 只是迁移的别名,它太努力变得聪明了。你重命名了这个字段吗?您是否删除了该字段?你必须指定一个默认值......你在乎什么,那些只是测试数据。核爆他们,我会输入新的。尽管我诚实的回答,我仍然得到“列不存在”、“数字不能转换为 hstore”、“十进制不是 JSON 可序列化”和其他奇迹。我想一旦项目投入生产,迁移肯定会有很大帮助。但是,当我正在开发它时,请放过我。 :-/

我尝试删除myapp/migrations 目录。我尝试从 psql 中删除 django_migrations 表。我又试了manage startapp myapp。我试过manage flush。它暂时有效,但一段时间后,该项目仍然以某种方式“记住”了之前模型中的内容,并大发雷霆。

请问,有什么正常的方式可以说“只删除所有表,重置所有数据,读取 models.py,然后从中重新创建数据库”? syncdb 过去的工作方式。

【问题讨论】:

    标签: django database-migration


    【解决方案1】:

    要对现有数据库进行更改,您必须使用迁移。

    如果您对模型进行更改并且不想使用迁移,您有两种方法:

    1. 手动将此更改添加到数据库
    2. DROP 数据库并重新创建它

    manage flush 不清除数据库和删除表,它只清除数据并在syncdb之后将数据库返回到状态。

    你应该编写makefile,它将删除数据库并重新创建它,然后是syncdb。

    更新: 你也可以使用https://docs.djangoproject.com/en/dev/ref/django-admin/#sqlclear-app-label-app-label

    【讨论】:

    • 1 反对 DRY。 2(使用makefile自动化)似乎可行,但权限很复杂,当我重新创建数据库时,我可能不得不输入很多密码。再说了,这一步看起来真的不应该一天做三遍。 :-P 所以……看来我的预感是对的,真的没有办法再简单地做到这一点了。我认为这会使很多人与 Django 疏远。 :-( 不,我不能使用 sqlclear。他们也关闭了那条路。App myapp has migrations. You cannot use sqlclear when an app has migrations.Shame。
    猜你喜欢
    • 2014-01-20
    • 2016-02-20
    • 2017-07-13
    • 1970-01-01
    • 2017-07-01
    • 2019-02-04
    • 2017-03-25
    • 2018-04-25
    • 2021-07-20
    相关资源
    最近更新 更多