Django 1.8 Syncdb 与迁移

Django 1.8 Syncdb vs migrate

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

所以我最终遇到了一个错误 "relation already exists"。

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

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

此外,需要注意的一件事是 syncdb 命令自 Django 1.7 起已弃用,并将在 Django 1.9 中删除。所以,你应该使用 migrate 命令。

来自syncdb docs:

Deprecated since version 1.7:
This command has been deprecated in favor of the migrate command, which performs both the old behavior as well as executing migrations.

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