代码之家  ›  专栏  ›  技术社区  ›  geowa4

Django型号同步表

  •  4
  • geowa4  · 技术社区  · 15 年前

    如果我更改了django模型中的字段,如何将其与数据库表同步?我是否需要在数据库上手动执行,或者是否有工具可以帮助执行此过程?

    5 回复  |  直到 15 年前
        1
  •  6
  •   Community CDub    7 年前

    唉,Django不支持任何简单的解决方案。

    Django唯一能为您做的就是用与新模型匹配的新表重新启动数据库:

    $ #DON'T DO THIS UNLESS YOU CAN AFFORD TO LOSE ALL YOUR DATA!
    $ python PROJECT_DIR/manage.py syncdb
    

    下一个选项是使用各种SQL*选项manage.py查看Django将如何将当前模型与数据库匹配,然后发布自己的 ALTER TABLE 使一切正常运行的命令。当然,这是容易出错和困难的。

    真正的解决方案是使用数据库迁移工具,例如 south 生成迁移代码。

    这里是一个 similar question 讨论了Django的各种数据库迁移选项。

        2
  •  4
  •   Sam    15 年前

    似乎无法在标记的答案中添加评论,可能是因为我没有足够的代表(如果告诉我这样做,那就太好了)。

    不管怎样,我只是想在回答的帖子里加上一句,我相信关于syncdb是错误的-syncdb是错误的 一旦创建了触摸表并在其中包含数据。你应该 通过调用来丢失数据(否则,如何为新应用添加新表?)

    我相信海报是指重置命令,而不是 导致数据丢失-它将删除表并重新创建它,因此它将具有所有最新的模型更改。

        3
  •  3
  •   anschauung    15 年前

    Django Evolution 可以帮助您,但最好的选择是提前计划好您的模式,或者手动进行简单的修改。或者,通过删除表并重新同步来干杯您的测试数据。

        4
  •  2
  •   jds    15 年前

    Django不提供开箱即用的服务。

    这是从姜戈的书中得到的一些信息 doing it by hand (请参见更改数据库架构)。这适用于简单的简单更改。

    从长远来看,您可能希望使用迁移工具。主要有三种选择:

    编辑:查看tokenmacguy链接的问题,为了完整起见,我将在列表中再添加两个:

        5
  •  0
  •   Steve Jalim    15 年前

    只是想提出一个额外的意见——Dmigrations非常好,而且很容易使用,但我想说,South是你最好的选择。同样,它很容易进入,但是它更强大,并且支持更多的数据库后端,而不仅仅是MySQL。它甚至可以处理MSSQL,如果这是你的事情的话。