South - 在 Django 中 Migrate Database
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
,自动应用所有 app 的表结构迁移脚本。
migrate
另一篇博客
我们在用 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的更多相关文章
- Django中如何使用django-celery完成异步任务1(转)
原文链接: http://www.weiguda.com/blog/73/ 本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误ht ...
- Django中的ORM
Django中ORM的使用. 一.安装python连接mysql的模块:MySQL-python sudo pip install MySQL-python 安装完成后在python-shell中测试 ...
- 在Django中使用ORM创建图书管理系统
一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...
- django中sqlite迁移mysql
sqlite数据迁移 1 数据备份 django中打开terminalpython manage.py dumpdata authorization > authorization_data.j ...
- Django中的ORM框架使用小技巧
Django中的ORM框架使用小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...
- Django中的信号基础知识
Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 1 2 3 4 5 6 7 8 9 10 ...
- django中数据库操作有关部分
# >>>>>>>>>>>>>>>>>>>>>>>>&g ...
- Django中一个项目使用多个数据库
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...
- django中模型详解-字段类型与约束条件
这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...
随机推荐
- HTML5适合移动应用开发的几大特性
1.离线缓存为HTML5开发移动应用提供了基础 HTML5 Web Storage API可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本机的ROM中,还可以 ...
- python操作excel表格详解(xlrd/xlwt)
http://www.2cto.com/kf/201501/373655.html http://blog.csdn.net/b_h_l/article/details/17001395 利用pyth ...
- iOS 模拟器上录制Demo视频
在App审核中会让用户上传一段简易的视频,那么如何制作改视频呢? 今天无意中在Cocochina 中看到 说利用QuickTime来制作,而QuickTime是操作系统自带的. 哦 My,God ! ...
- rails之 Migrations (转)
1.简介 在rails中用migration可以很方便的管理数据库的结构.可以创建数据库,创建表,删除表,添加字段,删除字段,整理数据. migration就是一系列的class,这些类都继承了Act ...
- 反射+泛型+缓存 ASP.NET的数据层通用类
using System; using System.Collections.Generic; using System.Text; using System.Reflection ; using S ...
- java中Collection类及其子类
1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java ...
- CSS第一天总结
CSS是层叠样式表,其作用在我看来就是统一一个或多个元素或者ID.class等的属性,CSS可以定义的属性非常多,一个好看的网页离不开CSS的修饰. CSS简而言之就是三个部分:选择符.属性.属性值. ...
- linux命令:head
1.命令介绍: head用来显示文件的开头的一部分. 2.命令格式: head [选项] 文件 3.命令参数: -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行 ...
- 数据库最大连接池max pool size
本文导读:Max Pool Size如果未设置则默认为100,理论最大值为32767.最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影 ...
- windows python3.2 shell环境(python叫做解释器)
[进入python的shell 环境:](python里称作命令解释器,windows叫做cmd,unix叫做shell) cmd 输入set path=%path%;e:\python2.7然后输 ...