django schema migration

时间:2024-11-01 17:34:32

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

那么south应运而生。

south简单使用方法:

安装:

pip install South

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

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

django schema migration

測试安装:

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,以下是发生了神马(注意黄色加亮部分):

django schema migration

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

django schema migration

django schema migration

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

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

django schema migration

兴许自己主动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, 例如以下:

django schema migration

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

django schema migration

migrate之前,我们看下south_test表

django schema migration

运行migrate,例如以下:

django schema migration

再次查看数据库表south_test

django schema migration

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

django schema migration

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

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

manage.py convert_to_south your_app

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

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

django schema migration

(注意:假设代码增加了版本号控制---比方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.****.net/lion_awake/article/details/38283621,谢谢!