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
命令。
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
时,它会尝试查找以前的迁移文件。如果没有找到,它会创建一个初始迁移文件。当它试图将它应用到数据库时,它发现关系已经存在。从而引发错误。
最佳做法是,在更新模型之前,创建一个迁移然后修改模型。
我创建了一个模型并执行了 syncdb,它按照我设计的模型创建了表格。
之后我修改了模型并执行了 makemigrations
,它创建了忽略 syncdb 已经创建的表的迁移。
所以我最终遇到了一个错误 "relation already exists"。
为什么 makemigrations 从头开始创建所有内容? 我该如何解决这种情况?
makemigrations
根据检测到的模型更改创建新迁移。
此外,需要注意的一件事是 syncdb
命令自 Django 1.7 起已弃用,并将在 Django 1.9 中删除。所以,你应该使用 migrate
命令。
Deprecated since version 1.7:
This command has been deprecated in favor of themigrate
command, which performs both the old behavior as well as executing migrations.
makemigration
总是创建一个包含所有更改的迁移文件。因此,当您第一次 运行 makemigration
时,它会尝试查找以前的迁移文件。如果没有找到,它会创建一个初始迁移文件。当它试图将它应用到数据库时,它发现关系已经存在。从而引发错误。
最佳做法是,在更新模型之前,创建一个迁移然后修改模型。