【问题标题】:Django: update database schema without losing dataDjango:更新数据库模式而不丢失数据
【发布时间】:2011-08-10 00:56:36
【问题描述】:

如果我想升级(更改)我的数据库架构(将新字段添加到表中,只将它们添加到 Django 模型中)而不丢失这些表中的数据,那么最好的解决方案是什么? “syncdb”当然不会添加它们,所以我需要你的建议如何在不删除它们的情况下更改表并使用 syncdb 重新创建。

【问题讨论】:

    标签: django syncdb


    【解决方案1】:

    当南方不是一个选项时,我只是手动编写脚本进行小的更改。还有我用的大的

    ./manage.py dumpdata appname
    

    http://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model

    将其放入文件中。运行正则表达式替换以更新任何添加/删除的字段,然后可以重置该应用程序。我不得不承认我已经有一段时间没有这样做了,但是如果需要,我可以获取一些特定的代码来为您执行此操作。

    它使用loaddata 加载备份

    编辑

    Django dump data for a single model? 这个问题很相似,可能有我所说的信息。

    如果您需要,请告诉我,我会为您挖掘我的旧脚本(或写一个不错的简单脚本)。

    更新

    ./manage.py dumpdata appname --indent=4 > appname.json
    
    #open your fav text editor and do a find/replace 
    
    ./manage.py reset appname
    ./manage.py loaddata appname.json
    

    应该这样做。当您执行查找替换时,您只需要删除您不再拥有的字段并添加不可为空的字段。 (至少)。

    注意: --indent=4 可以很好地为您格式化所有内容。这意味着4个空格。 ./manage.py 重置仅适用于 django 1.3 之前的 django 1.3(啊!),您必须执行 ./manage dbshelldrop table。从命令./manage.py sqlreset appname 中可以找到相应的 sql。

    【讨论】:

    • 需要尝试使用它来熟悉它,但听起来很合理。当然,如果你有你提到的脚本并且可以分享,在写我自己的之前看看它会很好:) 但肯定会尝试使用它,谢谢!
    • 我假设您正在运行 linux?
    • Mac!...哦不! ;) 我找不到我的脚本,但我可以大致了解阅读我的更新的步骤。
    • 这很容易,目前我将使用这种方式。以后也许会尝试南方,但现在这应该足够了:)
    【解决方案2】:
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多