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很简单,命令如下:
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,谢谢!