我试图了解 Django 1.7 之间的区别syncdb
,migrate
我已经阅读了一些关于区别的堆栈帖子。我知道这取决于版本,下一个版本的 Django 将实现“迁移”,而目前,South 是一个外部应用程序,等等。
但是,从技术上讲,场景之外的区别是什么?迁移有什么不同?
我试图了解 Django 1.7 之间的区别syncdb
,migrate
我已经阅读了一些关于区别的堆栈帖子。我知道这取决于版本,下一个版本的 Django 将实现“迁移”,而目前,South 是一个外部应用程序,等等。
但是,从技术上讲,场景之外的区别是什么?迁移有什么不同?
我同意 Maxime:查看 Andrew Goodwin 的演讲 - Designing Django's Migrations。这是一个很好的起点。
我们还整理了一个关于 Django 迁移的系列:
查看第一篇文章以了解 和 之间的区别syncdb
,migrate
而第二篇文章详细介绍了幕后发生的一切。
从 Django 1.7 开始,该框架实现了一个内置的迁移系统。正如你所说,已经有South了,但它是一个外部模块。当您过去使用 Django 并修改已在数据库中创建的模型时,如果您不使用 South,则必须“手动”更改表。syncdb
仅在第一个表中创建表,并且在更改模型时无法更新它。
1.7 发行说明说:
Django 现在具有对模式迁移的内置支持。它允许通过创建表示模型更改并且可以在任何开发、登台或生产数据库上运行的迁移文件来更新、更改和删除模型。
这意味着当您在模型中添加、修改或删除字段时,您可以创建一个 Python 文件,将这些更改应用于您的数据库。这很方便,因为每个开发人员现在都可以通过一个简单的命令更新他们的本地版本或生产:manage.py migrate
.
多亏了这个系统,您的错误更少,因为您不需要自己报告数据库中的模型修改,更容易保留历史记录和使用 VCS(您可以向前和向后迁移,或撤消/重做如果您愿意,可以迁移)。实际上,这些创建的 Python 文件都存储在该文件夹中<app>/migrations
,每次修改都有一个文件。
它已集成到 Django 中,因为每个人都需要它,而且它不需要任何成本(运行时性能不受影响)。如果你想了解更多关于这个主题的信息,我推荐你参加这个演讲:Andrew Godwin:Designing Django's Migrations - PyCon 2014(Youtube 视频 - 26 分钟)