Django 1.8 Syncdb vs migrate

时间:2015-08-30 17:48:41

标签: django migration django-syncdb

我创建了一个模型并执行了syncdb,它创建了我的模型设计的表格 之后我修改了模型并执行了makemigrations,它创建了迁移,忽略了syncdb已经创建的表。

所以我最终得到一个错误“关系已经存在”。

为什么makemigrations从头开始创建所有内容? 我该如何解决这种情况?

2 个答案:

答案 0 :(得分:10)

makemigrations根据检测到的模型更改创建新的迁移。

此外,需要注意的一点是,自Django 1.7以来,syncdb命令已被弃用,并将在Django 1.9中删除。因此,您应该使用migrate命令。

来自syncdb docs:

  

自1.7版以来已弃用:
  此命令已被弃用   支持migrate命令,它执行旧的行为   以及执行迁移。

答案 1 :(得分:2)

makemigration始终会创建一个包含所有更改的迁移文件。因此,当您第一次运行makemigration时,它会尝试查找上一个迁移文件。如果没有找到,它会创建一个初始迁移文件。当它试图将它应用于数据库时,它发现关系已经存在。因而抛出错误。 最佳实践是,在更新模型之前,创建一个迁移,然后修改模型。

相关问题