Django------South 工具的使用说明

South的简单说明:

在django中如果我们已经syncdb之后,再增加或者删除属性列的时候,djnago自带的sybcdb并不能够再次同步,这个工具不能同步models和数据库,是有缺陷的,可以用south作为代替其的工具,South 能够检测对models的更改并同步到数据库。

South的基本使用方法:

安装South:fedora下 #sudo easy-install South;

将South作为app添加到setting文件中:INSTALL_APP添加south;

对于第一次使用的情况:

python manage.py schemamigration yourappname --initial

# --initial在数据库创建models定义的表,以及South需要的south_migrationhistory表,另外会在yourappname下创建一个migration的子目录

#以后每次对models修改以后,可以运行如下两条命令同步到数据库

python manage.py schemamigration yourappname --auto #检测对models的更改

python manage.py migration yourappname #将更改反映到数据库

对于一个已经存在的项目(定义好了models,创建了相应的数据库,保存了响应的数据),这个时候需要设置以下步骤:

#在setting 文件的INSTALL_APP添加south,然后

python manage.py syncdb #syncdb已经被South修改,用来创建south_migrationhistory表

python manage.py convert_to_south yourappname#在yourappname下创建migration目录

以后就可以在这个项目中正常使用South了,每次修改以后重新启动server。

South的同步原理:

    对应每次models执行schemamigration后会在migration目录下生成对应此次更改的py文件,称之为migrate,件名形如0002_autodel_field_notes_create_user.py,同步数据库的时候会顺序(文件名 ASCII排序)执行这些py文件,文件里包含一个Migration类,里边有两个方法forwards和backwards,将更改同步到数据库会执行forwards方法,数据库操作失败会调用backwards实现rollback功能。

常见问题

1. 添加和删除字段时可能会要求输入 default value(django里面models里面的许多字段默认都是null=False)
     对于添加字段,输入的默认值必须和models定义的类型匹配,否则同步数据库的时候会报错
     对于删除字段的情况,可以随意输入一个value而不管字段的默认类型,可以实现删除,但是并不可取,具体原因可以参见South的实现机制(rollback到删除字段之前会失败)。

2. 杀手锏
     如果South在同步数据库的过程中出现错误,则migrations目录下面对应此次更改的python文件不会被执行,可以运行python manage.py migrate --list查看没有执行的py文件,文件名前面没有*表示该文件对应的更改没有反应到数据库,只需删除掉这些有问题的migrate,参照错误提示修改 models再同步即可,也可以直接更改对应的py文件修复错误

 

你可能感兴趣的:(django)