首页
登录 | 注册

South——完美替代django比较鸡肋的syncdb

使用South之前铭记:请你一定要相信他的能力,抛弃对他的不信任感。因为South给人的第一印象就是好像每个操作都在抛异常。

South概述

* 针对django自带的syncdb同步models和数据库的缺陷开发的数据迁移工具,可以作为syncdb的替代,South能够检测对models的更改并同步到数据库.

South基本用法

* 安装完South之后,要在django项目中使用South,先要将South作为一个App导入项目,所以设置INSTALL_APP添加south

* 第一次使用South(对于已存在的项目转用South见下一步的介绍)

python manage.py schemamigration youappname --initial # --initial在数据库创建models定义的表,以及South需要的south_migrationhistory表,另外会在youappname目录下面创建一个migrations的子目录 
 #以后每次对models更改后,可以运行以下两条命令同步到数据库 

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

 python manage.py migrate youappnam #将更改反应到数据库

迁移到South

* 对于一个已存在的项目(定义了models,创建了相应的数据库,保存了响应的数据),这时想要使用South替代原来的syncdb只需要一些简单的步骤:

* 同样需要现在INSTALL_APP里面添加south,然后

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

 python manage.py convert_to_south youappname #在youappname目录下面创建migrations目录以及第一次迁移需要的0001_initial.py文件

* 以后在这个项目中就可以正常使用South了

South同步原理

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

You can also specify a specific migration to migrate: * python manage.py migrate 0002_autodel_field_notes_create_user.py Note that, if the system has already migrated past the specified migration, it will roll back to it instead. If you want to migrate all the way back, specify the special migration name zero: * python manage.py migrate zero

常见问题

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之用户登录跳转
    上次介绍了用户登录界面的使用,主要是使用bootstrap,这方面有兴趣的朋友可以去深入的学习下. 另外上次也给出了一些用户登录以及注册的函数,可能一下子代码有点多,这次主要是简化新加用户的方法和使用, 这些掌握了以后可以接着上次说的函数来 ...
  •         这个条款其实就是宁可以编译器替换预处理器,因为#define不被视为语言的一部分,比如:         #define ASPECT_RATIO 1.653         在编译器处理源码前,ASPECT_RATIO就被 ...
  • Windows2008_R2(64位)IIS7.5安装PHP-5.3完美教程
    在Windows2008 R2(64位)系统上,IIS版本是7.5,如何安装支持PHP5.3呢?本文尝试讲解之. [软件环境] 操作系统:Windows 2008 R2 Service Pack 1 (64位) IIS环境:IIS 7.5 ...
  • Deploy with 'Git Push' by Jess Johnson in Tips & Tutorials Single command deploys are awesome. When setting up a tes ...
  • 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架.网络爬虫.网络内容提取.模板引擎.数据库. ...
  • Cobbler 登录web界面提示报错"Internal Server Error" JasonMingHao关注0人评论2882人阅读2019-01-07 16:41:49 在访问cobbler web界面到时候出现以 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号