有没有办法用模型中的更改来更新数据库?

时间:2011-07-31 23:04:44

标签: django django-models django-database django-syncdb

  

可能重复:
  update django database to reflect changes in existing models

我过去曾使用过Django,而我作为ORM工具遇到的一个挫折就是无法使用模型中的更改来更新现有数据库。 (Hibernate很好地完成了这个非常并且使得更新和大量修改模型并将其应用到现有数据库非常容易。)有没有办法做到这一点没有擦除每次数据库?在我想要玩的模型中的每次更改之后,它必须重新生成管理员用户和网站真的

4 个答案:

答案 0 :(得分:9)

你会想要看看南方。它提供了一个迁移系统,用于将架构更改以及数据从一个版本迁移到下一个版本。

它非常强大,绝大多数变化都可以通过

来处理
manage.py schemamigration --auto
manage.py migrate

自动功能确实有限制,特别是如果要在生产系统上运行更改,最终应检查生成的代码--auto,以确保它正在按预期执行。

南方有一个很好的入门指南,并有详细记录。您可以在http://south.aeracode.org

找到它

答案 1 :(得分:1)

没有

正如the documentation of syncdb command所述:

  

Syncdb不会改变现有表格

     

syncdb只会创建表格   对于尚未安装的型号。它永远不会发行   ALTER TABLE语句用于匹配之后对模型类所做的更改   安装。经常更改模型类和数据库模式   涉及某种形式的歧义,在这种情况下,Django会有   猜测要做出的正确改变。存在危险的风险   数据将在此过程中丢失。

     

如果您对模型进行了更改并希望更改数据库   要匹配的表,使用sql命令显示新的SQL结构   并将其与您现有的表架构进行比较以计算出来   变化。

答案 2 :(得分:0)

南方似乎是大多数人解决这个问题的方法,但实现这一目的的一种非常快速简便的方法是直接通过数据库的交互式shell更改数据库。只需启动db shell(通常只是dbshell)并使用db语法手动更改,添加,删除需要更改的字段和表。

您可能希望运行manage.py sqlall appname以查看Django在创建更新的表时将运行的sql语句,然后根据需要使用这些语句来更改数据库表和字段。

Django书中对数据库模式的更改部分提供了一些如何执行此操作的示例:http://www.djangobook.com/en/1.0/chapter05/

答案 3 :(得分:0)

我手动进入数据库 - 无论你可能是什么:MySQL,PostgreSQL等 - 更改数据库信息,然后我相应地调整models.py以供参考。我知道有Django South,但我不想打扰使用另一个第三方应用程序。