为什么Django 1.7从syncdb迁移到迁移?

时间:2014-03-09 10:56:52

标签: python django django-migrations

我试图理解Django 1.7上syncdbmigrate之间的区别,我已经阅读了一些有关差异的叠加帖子。我知道这取决于版本,Django的下一个版本将实现“迁移”,而现在,South是一个外部应用程序等。

但是除了现场之外还有什么区别,我的意思是从技术上说?迁移的做法有何不同?

2 个答案:

答案 0 :(得分:4)

我同意Maxime:看看Andrew Goodwin的演讲 - Designing Django's Migrations。这是一个很好的起点。

我们还制作了一个关于Django迁移的系列文章:

  1. 第1部分:Django Migrations - A Primer
  2. 第2部分:Digging Deeper into Migrations
  3. 第3部分:Data Migrations
  4. 视频:Django 1.7 Migrations - primer
  5. 查看第一篇文章,了解syncdbmigrate之间的差异,而第二篇文章详细介绍了幕后发生的所有事情。

答案 1 :(得分:3)

从Django 1.7开始,该框架实现了一个内置的迁移系统。如你所说,已经有South,但它是一个外部模块。当您在过去使用Django并修改了已在数据库中创建的模型时,您必须手动更改表格" "如果你没有使用南方。 syncdb仅将表创建为第一个表,并且在更改模型时无法更新它。

1.7 release notes说:

  

Django现在内置了对架构迁移的支持。它允许通过创建表示模型更改的迁移文件来更新,更改和删除模型,并且可以在任何开发,登台或生产数据库上运行。

这意味着当您添加,修改或删除模型中的字段时,您可以创建一个Python文件,将这些更改应用于您的数据库。这很方便,因为每个开发人员现在都可以通过一个简单的命令更新其本地版本或生产:manage.py migrate

由于这个系统,您可以减少错误,因为您不需要自己报告数据库中的模型修改,更容易保留历史记录并使用VCS (您可以去前进和后退迁移,或撤消/重做迁移(如果您愿意))。实际上,创建的这些Python文件存储在文件夹<app>/migrations中,每次修改都有一个文件。

它已经集成到Django中,因为每个人都需要它并且它不会花费你任何东西(运行时性能不受影响)。如果您想了解有关此主题的更多信息,我建议您进行以下讨论:Andrew Godwin: Designing Django's Migrations - PyCon 2014 Youtube视频 - 26分钟