Django数据库迁移组件(South)

django提供syncdb命令,用于从models自动生成数据库。但在models结构变化后,syncdb并无法自动实现数据库的更新。South组件即是为了解决该问题而出现的。
下面简单介绍一下South的一些最常见用法,更详细的使用方法见South的官方手册。

假设我们创建了一个名叫southtut的app

  1. 生成初始化数据库的south脚本。允许上述命令后将在对于的app目录下生成 migrations目录,south的数据库迁移脚本即保存在该目录。
    ./manage.py schemamigration southtut --initial
  2. 在所用south后,syncdb命令不会为使用south托管的app生成数据库。migrate命令用于执行south的数据库迁移脚本, 实现数据库更改。在这里执行的操作是为southtut创建相关的数据库表。不带app名字时,将对project中的所有app进行migrate操 作。
    ./manage.py migrate southtut
  3. 在很多应用场景中,我们已经用syncdb将数据库给创建好了。这时候运行上面的migrate命令将会提示相关表已经存在,命令执行失败。这 时候我们需要告诉south需要跳过某些migrate操作。上面的命令将告诉south,系统已经执行过了0001号数据库迁移脚本。
    ./manage.py migrate southtut 0001 --fake
  4. 接下来我们对models进行了某些改动,修改后增减了某些字段。
  5. 该命令将自动生成数据库的迁移脚本。在migrations目录下可以看到新增加了文件0002_xxx.py,该文件即是此次models改 动的数据库升级脚本。打开文件后可看到其中有一个类Migration,类中有两个方法forwards和backwards。这两个方法分别实现数据库 升级和会滚时对数据库的操作,具体指令的含义参考south的数据库API
    ./manage.py schemamigration southtut --auto
  6. 应用models的改动到数据库
    ./manage.py migrate southtut