博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django------South 工具的使用说明
阅读量:5065 次
发布时间:2019-06-12

本文共 1560 字,大约阅读时间需要 5 分钟。

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文件修复错误

 

转载于:https://www.cnblogs.com/wenjiashe521/archive/2012/09/03/2668695.html

你可能感兴趣的文章
centos6.8下安装matlab2009(图片转帖)
查看>>
Mongo自动备份
查看>>
求助大神!怎样批量删除数据库表中某个字段中同样的一段字符!
查看>>
VMWARE虚拟机无法访问的三种方法分析
查看>>
enq: SQ - contention
查看>>
cer证书签名验证
查看>>
ant 安装
查看>>
新手Python第一天(接触)
查看>>
vue路由动态加载
查看>>
iOS中ARC内部原理
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
你不得不了解的应用容器引擎---Docker
查看>>
easyui datagrid 弹出页面会出现两个上下滚动条处理办法!
查看>>
迭代器和生成器
查看>>
codevs 1080 线段树练习
查看>>
JS模块化库seajs体验
查看>>
Android内核sysfs中switch类使用实例
查看>>
POJ2288 Islands and Bridges(TSP:状压DP)
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>