django schema migration

syncdb 仅仅能初始化table(create),不能自己主动update/delete/drop。

那么south应运而生。


south简单使用方法:

安装:

   pip install South


安装完后,增加到INSTALLED_APPS中,并syncdb一下,否则会出现south_migrationhistory 表找不到。

(注:此时syncdb的行为被south改变了,注意命令行输出,表south_migrationhistory的结构例如以下:



測试安装:

  manage.py shell

 >> import south


建立一个test_south的app,并建立模型south_test,加入一个字段name。 将app加入到INSTALLED_APPS中。

from django.db import models

class south_test(models.Model):
    name = models.CharField(max_length=100)
# Create your models here.


第一次使用:

  manage.py  schemamigration your_app --initial   

  manage.py migrate your_app

本例中,your_app自然是test_south,以下是发生了神马(注意黄色加亮部分):


这一步,仅仅是生成了用于创建数据库表的迁移文件,主要是0001_initial.py,内容例如以下:




这一步,才真正生成了数据库模型,而且在south_migrationhistory加入了一条记录。

数据表south_migrationhistory 插入了一条记录,例如以下:



兴许自己主动ORM:

  manage.py  schemamigration your_app --auto

  manage.py migrate your_app

为了演示,如果如今,因为需求变化,我们改动模型test_south.south_test,加入字段 memo,例如以下:

from django.db import models

class south_test(models.Model):
    name = models.CharField(max_length=100)
    memo = models.CharField(max_length=100)

我们不再运行syncdb,改为运行schemamigration / migrate, 例如以下:


创建了一个0002的文件,例如以下:



migrate之前,我们看下south_test表


运行migrate,例如以下:


再次查看数据库表south_test


我们再次观察下south_migrationhistory表,例如以下:


==========================

对于已经存在的app,增加south非常easy,命令例如以下:

manage.py convert_to_south your_app

它仅仅是在表south_migrationhistory里面加入一条记录(同一时候生成迁移文件)。

如果我们这里的your_app是books,那么south_migrationhistory的记录例如以下:


(注意:假设代码增加了版本号控制---比方svn,那么其它人下载代码后,须要运行manage.py migrate myapp 0001 --fake,由于convert_to_south总是会尝试创建全部已经存在了的表,通过这个命令告诉south,myapp已经创建了这些表,它不须要再次创建了。以后就依照正常的迁移来做:

  manage.py syncdb

后面假设有改动模型,则运行

  manage.py  shemamigration myapp --auto

  manage.py migrate myapp



很多其它信息,能够參考这里:http://south.readthedocs.org/en/latest/tutorial/part1.html#tutorial-part-1


转载请注明来自:http://blog.csdn.net/lion_awake/article/details/38283621,谢谢!


原文地址:https://www.cnblogs.com/lcchuguo/p/4002389.html