django syncdb和更新的模型

时间:2009-10-22 08:04:53

标签: python django django-models

我最近更新了我的模型,为它添加了一个BooleanField但是当我执行python manage.py syncdb时,它不会将新字段添加到模型的数据库中。我该如何解决这个问题?

7 个答案:

答案 0 :(得分:100)

从Django 1.7开始

Django内置了对迁移的支持 - 请查看the documentation

对于Django 1.6及更早版本

Django不支持开箱即用的迁移。 Django有一个可插拔的应用程序可以做到这一点,而且效果很好。它被称为South

答案 1 :(得分:14)

Django目前不会自动执行此操作。您的选择是:

  1. 从数据库中删除表,然后使用syncdb以新格式重新创建表。
  2. 使用python manage.py sql (appname)为数据库打印SQL,找到该字段的添加行,并使用alter table SQL命令手动添加。 (这也允许您为当前记录选择字段的值。)
  3. 使用South(按Dominic's answer)。

答案 2 :(得分:11)

请按照以下步骤操作:

  1. 使用dumpdata管理命令
  2. 将数据导出到灯具
  3. 放下桌子
  4. 运行syncdb
  5. 使用loaddata管理命令
  6. 从灯具中重新加载数据

答案 3 :(得分:8)

正如在最佳答案中所建议的那样,我尝试使用South,在obscure migration errors感到沮丧的一小时之后决定改为使用Django Evolution

我认为开始使用比南方更容易,并且在我第一次键入./manage.py evolve --hint --execute时效果非常好,所以我很满意。

答案 4 :(得分:2)

暂时没有使用django,但我似乎记得syncdb确实在db表上执行alter命令。你必须放弃表然后再次运行它将再次创建。

编辑:抱歉不执行更改。

答案 5 :(得分:1)

在django 1.6

  • 首先我们运行 - python manage.py sql <app name>

  • 然后我们必须运行 - python manage.py syncdb

答案 6 :(得分:0)

如果您使用Apache和MySQL运行Django,请在使用 makemigrations 进行迁移后重启apache。