社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DjangoApp

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

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

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
 
13579 次点击  
文章 [ 14 ]  |  最新文章 10 年前
JianZhen
Reply   •   1 楼
JianZhen    10 年前

@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    10 年前

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

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

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

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

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

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

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

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

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

是好东西啊

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

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

indexofire
Reply   •   9 楼
indexofire    11 年前

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

zhwei
Reply   •   10 楼
zhwei    11 年前

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

paomian
Reply   •   11 楼
paomian    11 年前

试试

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

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

zhwei
Reply   •   13 楼
zhwei    11 年前

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

Leo
Reply   •   14 楼
Leo    11 年前

nice