Py学习  »  DjangoApp

[精华] South:Django最好用的数据库Schema和数据迁移APP

Py站长 • 11 年前 • 12826 次点击  

South是目前Django最热门的APP之一。

它的主页是:http://south.aeracode.org/

我们在用 Django开发系统的时候常会遇到一个问题,那就是资料库的Schema 在开发的过程中有可能会变动,接着我们执行syncdb后会发现,原先存在的Model在修改Schema后并不会更新到数据库。

手动修改数据库太过麻烦了,但在数据中有数据的时候我们又不想整个删掉重来。这时候South就派上用场啦。

South可以自动帮我们搞定数据库 migrate 这个麻烦的工作,且可以让数据库做到版本控制。

下面简要介绍一下South的使用方法:

首先我们需要安裝 south 這個APP。

设定

  • 把 south 加到 settings.py 的 INSTALLED_APPS 中
  • 建立 south 的历史记录中 python manage.py syncdb
  • 在 你想要进行数据迁移的 app 中使用 south

    python manage.py convert_to_south <app_name>

完成后会发现在 你的APP目录下多出一个migrations文件夹,里面会有一个0001_initial.py文件。表示已经成功转换成south了。

使用

  • 當修改完 schema 需要做 migrate 時,執行

      python manage.py schemamigration <app_name> <migration_name> --auto
    

    這個指令會自動檢查欄位的更動,並詢問一些問題,完成後在 migrations 目錄下會出現

      <version#>_<migration_name>.py
    
  • 修改到資料庫 python manage.py migrate

回復之前版本

  • 在每次執行完 schemamigration 後,migrate 目錄下的版本號 <version#> 會從 0001, 0002 一直增加上去 。 當需要回復到先前的版本時,只要執行
    python manage.py migrate <app_name> <version#>
    

完成後,資料庫就會回到先前的版本了 但切到欄位少的版本再切回來...資料表中消失的資料當然是不會再回來的

参考: http://techblog.insureme.com.tw/2012/02/south-django-migrate-database.html

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/11
 
12826 次点击  
文章 [ 14 ]  |  最新文章 9 年前
JianZhen
Reply   •   1 楼
JianZhen    9 年前

@zhwei 我在官网看到这么一段:

please note that South is now end of lifed in favour of the ​new migrations framework in Django 1.7, which is based on South but with significant design improvements. South will not work with Django 1.7; it supports only versions 1.4, 1.5 and 1.6.

South已经停止更新了,因为Django的1.7版本使用了基于South的新的迁移框架,所以South只支持到1.6,新版本的就没有必要使用South了。 也许你说的出错是因为版本的问题?

走遍北京的德福小猪-weibo
Reply   •   2 楼
走遍北京的德福小猪-weibo    9 年前

@Django中国社区 呵呵,我也是刚接触python django ,使用的是django1.7 ,按照官方文档的例子做的,后来自己做练习项目时,发现了这个问题,很苦恼。每次修改都得导出数据,删除数据库,导入数据,很麻烦。可以install south 试一下。

Py站长
Reply   •   3 楼
Py站长    9 年前

@走遍北京的德福小猪-weibo 没使用过最新版本的 迁移工具,不过我用south都没问题呢,不过你可以自己用SQL修改数据库,不用 migrate 也可以。

走遍北京的德福小猪-weibo
Reply   •   4 楼
走遍北京的德福小猪-weibo    9 年前

我想问下,如果自己想在已有的model中添加一个field 或者删除 ,那么使用使用 python manage.py syncdb 做数据迁移的时候会不会出问题。我用django1.7官方提供的 migrate做数据迁移时 老出现无法 migrate的情况 。如果我只是修改 field 的属性则没有没有问题 ,但是 添加和删除 field 常常提示无法迁移,不知道是什么原因,或者遇到和我相似的情形,有没有新的解决方案。

我心荡漾
Reply   •   5 楼
我心荡漾    9 年前

不过好像1.7以后无法使用,官方出了自己插件,可惜了

jun.xiong
Reply   •   6 楼
jun.xiong    9 年前

木头lbj
Reply   •   7 楼
木头lbj    10 年前

是好东西啊

易冷天涯
Reply   •   8 楼
易冷天涯    10 年前

现在深深地觉得没有这个工具的话开发是多么的可怕。

indexofire
Reply   •   9 楼
indexofire    10 年前

基本上是开发必备了,不过牵涉到custom field的文档一直没太明白,希望能有好的英文或者中文文档和例子。

zhwei
Reply   •   10 楼
zhwei    10 年前

@Django中国社区 估计是当初不太会用south吧...留下阴影了

paomian
Reply   •   11 楼
paomian    10 年前

试试

Py站长
Reply   •   12 楼
Py站长    10 年前

@zhwei 不会哦,应该是使用方式不正确。Django社区就是用它来管理的呢~

zhwei
Reply   •   13 楼
zhwei    10 年前

好早之前用过,老报错呢...

Leo
Reply   •   14 楼
Leo    10 年前

nice