零、前言

最近改一个项目,需要对已有的model进行更改。大家都知道Django自带的syncdb只能创建数据库,但是无法将已经改变的model应用的数据库中。

大概两年前遇到这个问题的时候,网上的答案基本上都是自己手动进数据库修改。不过这次一搜,居然发现一个神器——South。

一、快速上手

South是什么东西呢,简单说就是实现migration的一个插件。用过Rails的人应该知道Rails自带migrate功能,非常好用,可以在不影响数据库中已有数据的情况下修改model。South就是干这个的。

由于这个插件比较简单,我就写一下我当时的用法,大家可以有个初步了解。具体的请自行Google South,去官网看。

安装:

easy_install south

配置:

在Django项目的 settings.py 里面的 INSTALLED_APPS 里最后一行加上 'south'。

使用:

因为我已经有了数据,所以运行:

python manage.py syncdb
python manage.py convert_to_south base

base是我存数据用的app。

这样就完成了south的安装配置和初始化。

现在我们可以修改model了。

修改完之后,我们运行:

python manage.py schemamigration base

来生成migration。

注意:这一步仅仅是生成了migration,还没有应用到数据库中。

接着我们运行:

python manage.py migrate base

这样就将migrate应用到了数据库中。

我们可以进数据库中手动查看一下,发现确实改变了。

二、总结

south这个东西,怎么说呢,我觉得只有神器可以形容了。你要知道当你面对已经有数据的项目并且想要修改model时候,那种小心翼翼生怕一步走错就丢失数据的感受有多蛋疼!south就好像是一个保护神,告诉你:放心改吧!

South——谁说Django不能migrate!的更多相关文章

  1. django 做 migrate 时 表已存在的处理方法

    django 做 migrate 时 表已存在的处理方法 文章来源:嗨学网 http://www.piaodoo.com 在开发web的时候,如果是以前已存在的项目,项目下载下来后,为了使用测试库的数 ...

  2. South - 在 Django 中 Migrate Database

    Web 开发避免不了经常修改表结构,手工修改表结构不仅容易出错,而且涉及到多人协作开发时,这么土的做法很不经济. Django 的第三方 app South 就是专门做数据库表结构自动迁移的.Jaco ...

  3. 当用DJANGO的migrate不成功时。。。。

    URL:http://my.oschina.net/u/862582/blog/355421 因为操作SQL数据库时不规范,或是多人开发时产生了同步问题,就可能导致正规的MIGRATE时不能完成. 已 ...

  4. django 做 migrate 时 表已存在的处理

    在开发web的时候,如果是以前已存在的项目,项目下载下来后,为了使用测试库的数据,会直接将整个测试库(如sqlite3)拿到本机来.这种情况下,如果执行的顺序不对,很容易在执行migrate的时候出现 ...

  5. Django关于migrate无效的问题

    目录 django关于manage.py migrate无效的问题解决 django关于manage.py migrate无效的问题解决 问题描述: 对于django已有的model,修改之后,想重新 ...

  6. Django后台

    django的后台我们只要加少些代码,就可以实现强大的功能. 与后台相关文件:每个app中的 admin.py 文件与后台相关. 下面示例是做一个后台添加博客文章的例子: 一,新建一个 名称为 zqx ...

  7. sfs - django start from scratch

    [TOC] Launch with code git spreading is obsolte lwc Installation Path D:\PythonWebSW\Django-1.5.5 ad ...

  8. Django之路:QuerySet API,后台和表单

    一.Django QuerySet API Django模型中我们学习了一些基本的创建和查询.这里专门讲以下数据库接口相关的接口(QuerySet API),当然你也可以选择暂时跳过这节.如果以后用到 ...

  9. Django之路: 基本命令与网址进阶

    一.Django 基本命令 温馨提示:如果你想学习Django,那么就请您从现在开始按照笔记记录一步一步的用手把代码敲出来,千万不要偷懒哦..... 1.创建一个Django project djan ...

随机推荐

  1. stdlib.h 头文件

    stdlib 头文件即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldi ...

  2. [C语言 - 4] 指针

    存放变量地址的变量 int a = 1; int *p; p = &a;   在64位系统中,占用8个字节 直接引用 间接引用 *p : 指针指向的变量的值 不要使用未初始化的指针     1 ...

  3. LINUX下成功搭建SVN

    步骤如下: 1: yum install -y subversion 2:svnserve –version 3: [root@singledb ~]# mkdir /u02/svn [root@si ...

  4. ios页面传值的几种方法

    1.属性2.方法3.代理方法4.SharedApplication5.NSUserdefault6.通过一个单例的class来传递 属性这种方法传值挺方便的,只需要拿到它的指针,如果重新声明一个指针, ...

  5. 解北大OJ1088滑雪问题的记录

    问题: Time Limit:1000MS   Memory Limit:65536K Total Submissions:67600   Accepted:24862 Description Mic ...

  6. poj3259

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24864   Accepted: 8869 Descri ...

  7. windows下实现微秒级的延时

    windowsintegeriostream汇编嵌入式任务 最近正在做一个嵌入式系统,是基于windows ce的,外接硬件的时序要微秒级的延时.1.微秒级的延时肯定不能基于消息(SetTimer函数 ...

  8. Python3.5.2官方文档学习备忘录

    网址:https://docs.python.org/3/ 虽然学习官方文档有些耗时,不过看最原版的还是感觉好一点,原汁原味没有曲解没有省略. 从命令行向Python传递参数,运行:python - ...

  9. Linux下升级python版本

    转载自:http://lovebeyond.iteye.com/blog/1770476 CentOS下的Python版本一般都比较低,很多应用都需要升级python来完成.我装的centOS的默认的 ...

  10. hibernate+mysql 8小时问题

    在生产环境中使用了 自带的连接池 结果 遇到 mysql8小时问题 然后 采用了 c3p0 连接池 hibernate 版本 4.3.6 c3p0版本 0.9.5-pre10 ps:hibernate ...