Web 开发避免不了经常修改表结构,手工修改表结构不仅容易出错,而且涉及到多人协作开发时,这么土的做法很不经济。

Django 的第三方 app South 就是专门做数据库表结构自动迁移的。Jacob Kaplan-Moss 曾做过一次调查,South 名列最受欢迎的第三方 app。事实上,它现在已经俨然成为 Django 事实上的数据库表迁移标准,很多第三方
app 都会带 South migrations 脚本。

South 最常用的功能要用起来也非常轻松。

安装配置

安装:

pip install South

修改 Django 项目的 settings 文件,在 INSTALLED_APPS 里追加 'south',

创建初始版本信息

第 1 步,生成表结构的初始版本,执行下面的命令后,会自动创建 your_app/migrations 目录并生成0001_initial.py 脚本:

./manage.py schemamigration your_app --initial

第 2 步,如果数据库中已经存在 your_app 的表结构,则需要通过 --fake 命令告诉
South:

./manage.py migrate your_app --fake

若不存在,用下面命令在数据库中创建表结构:

./manage.py migrate your_app

增加 Model 字段

为 your_app/models.py 增加字段后,执行下面的命令 South 会自动比对 0001_initial.py 并生成0002_auto__xxxx.py

./manage.py schemamigration your_app --auto

下面的命令便是立即修改数据库,使新的表结构版本生效:

./manage.py migrate your_app

其它说明

日常使用基本上就是这些命令,South 能做的当然还不只这些,还可以用它来做表格字段的重命名、生成迁移依赖关系图、单元测试集成等等,官方文档写的非常仔细:http://south.readthedocs.org/

另外,原来部署只需要执行 ./manage.py syncdb,集成 South 后需要多做一步 ./manage.py
migrate
,自动应用所有 app 的表结构迁移脚本。

另一篇博客

我们在用 Django 开发系统的时候常会遇到一个问题, 那就是资料库的栏位在开发的过程中有可能会更动,接著我们执行 syncdb 后会发现,原先存在的 model 在修改栏位后并不会更新到资料库。手动修改资料库栏位太过麻烦,但在资料库中有资料的时候我们又不想整个砍掉重练。这时候 South 就派上用场了。

South 可以自动帮我们搞定资料库 migrate 这件麻烦的工作,且可以让资料库做到版本控制。接下来的内容会简单介绍一下 South 的使用方法。









首先我们需要安装 south 这个模组。

pip install South

设定

把 south 加到 settings.py 的 INSTALLED_APPS 中

建立 south 的歷史纪录

 python manage.py syncdb

在 app 中使用 south

 python manage.py convert_to_south <app_name>

完成后会发现在专案目录下多出一个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#>

完成后,资料库就会回到先前的版本了

但切到栏位少的版本再切回来...资料表中消失的资料当然是不会再回来的XD

South - 在 Django 中 Migrate Database的更多相关文章

  1. Django中如何使用django-celery完成异步任务1(转)

    原文链接: http://www.weiguda.com/blog/73/ 本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误ht ...

  2. Django中的ORM

    Django中ORM的使用. 一.安装python连接mysql的模块:MySQL-python sudo pip install MySQL-python 安装完成后在python-shell中测试 ...

  3. 在Django中使用ORM创建图书管理系统

    一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...

  4. django中sqlite迁移mysql

    sqlite数据迁移 1 数据备份 django中打开terminalpython manage.py dumpdata authorization > authorization_data.j ...

  5. Django中的ORM框架使用小技巧

      Django中的ORM框架使用小技巧 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...

  6. Django中的信号基础知识

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 1 2 3 4 5 6 7 8 9 10 ...

  7. django中数据库操作有关部分

    # >>>>>>>>>>>>>>>>>>>>>>>>&g ...

  8. Django中一个项目使用多个数据库

    在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...

  9. django中模型详解-字段类型与约束条件

    这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...

随机推荐

  1. jQuery键盘控制方法,以及键值(keycode)对照表

    键盘控制应用范围非常广泛,比如快捷键控制页面的滚动:在填写表单时候,限制输入内容:或者是屏蔽复制.粘贴.退后等功能.这里说说用jQuery比原生态的JS好用,代码简单清晰,不要问我JS怎么写,因为我不 ...

  2. git在本地仓库直接使用rm彻底删除文件,服务端还是存在

    本地仓库:A和B 服务器:C 今天在本地仓库A希望删除一个文件test,于是执行以下命令: 1 2 3 4 $ sudo rm test $ git add . $ git commit -m &qu ...

  3. Android Camera进行拍照

    Android应用提供了Camera来控制拍照,使用Camera进行拍照的步骤: 1.调用Camera的open()方法打开相机. 2.调用Camera的getParameters()方法获取拍照参数 ...

  4. 作业七:团队项目——Alpha版本冲刺阶段 001

    今天进展:准备开发环境,安装软件. 今天安排:因为软件过于庞大,所以我们第一天都在按软件,原本计划第一天要设计框架,但因为软件问题.所以我们决定留到第二天.

  5. 记录一些容易忘记的属性 -- UITabBarController

    UIViewController中的  @property(nonatomic,copy) NSString *title;  // Localized title for use by a pare ...

  6. Jmeter—8 连接microsoft sql server数据库取数据

    本文以Jmeter 连接microsoft sql server为例. 1 从微软官网下载Microsoft SQL Server JDBC Driver 地址:http://www.microsof ...

  7. MagicalRecord 多表关联数据操作

    最近在使用MagicalRecord做数据持久层CoreData的操作库,今天做了一个多表关联数据的操作,整理了一个demo,特此记录一下. 关于如何使用Cocopads 和 MagicalRecor ...

  8. public static void main(String[] args){}函数理解

    主函数的一般写法如下: public static void main(String[] args){…} 下面分别解释这些关键字的作用: (1)public关键字,这个好理解,声明主函数为publi ...

  9. 启动运行下载gradle速度太慢,手动添加

    启动运行下载gradle速度太慢,并且容易卡死(感谢群友ˋ狠ㄨ得意提供支持)---国内网络访问地址 我们经常运行项目的时候会需要进行下载gradle,不过由于网络或者和谐的问题经常下载需要花很长时间或 ...

  10. svn服务器迁移(生成dump)

    首先介绍一下dump文件 一定要进入VisualSVN服务端的安装目录里的bin目录下面,然后再执行svnadmin  相关命令. 不然会出现下图中的“svnadmin不是内部命令或外部命令,也不是可 ...