`

Django-south介绍

阅读更多


By Calabash

使用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 syncdb  #syncdb已经被South更改,用来创建south_migrationhistory表

python manage.py convert_to_south youappname #在youappname目录下面创建migrations目录以及第一次迁移需



 

* 以后在这个项目中就可以正常使用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-south-admin:Django应用程序允许通过Admin进行南部管理

    django-south-admin允许您通过Django的管理界面触发迁移并管理迁移历史。 django-south-admin使用连接到Django的管理界面,并注意用户权限。 内容 安装django-object-tools所描述。 将django-south-admin安装或...

    Django-1.3.1.tar.gz

    10. **数据库迁移工具(South)**:虽然1.3.1版本的Django还没有内置的迁移系统,但当时的开发者经常使用South这个第三方库来处理数据库模式的变迁。 通过对"Django-1.3.1"源码的深入研究,你可以了解到Django框架...

    毕业设计:基于python的博客系统,基于django和django-simpleui.zip

    - 数据迁移:Django的South或内置的makemigrations和migrate命令用于在数据库中创建、更新模型表结构。 3. Django视图(View): - 视图函数:接收HTTP请求并返回HTTP响应,负责业务逻辑的处理。 - 类视图:...

    django cms 用户文档

    此外,还包括了如何与South一起使用Django CMS,以及如何利用Django CMS进行导航设置等。 3. 高级功能 高级功能部分涉及Django CMS的深入配置和扩展。它包括如下主题: - 国际化:如何使用Django CMS创建支持多语言...

    Django -1.11.6下载

    3. 数据库管理:Django提供了强大的数据库管理工具,如数据库迁移系统(South被集成到Django内核中),用于管理应用程序的数据库结构变化,确保在开发过程中数据的安全。 4. URL路由:Django的URLconfs(URL配置)...

    python_package.rar

    setuptools-1.3.win-amd64-py2.7.exe adodbapi-2.6.0.7.zip Django-1.4.22.tar.gz django-ajax-forms-django-ajax-forms-0.1.1.zip django-ajax-selects-1.4.1.tar.gz django-appconf-1.0.1.tar....South-1.0.2.tar.gz

    django-docs-1.6文档API

    Django 1.6 API 文档详细介绍了以上这些核心概念以及更多细节,包括数据库迁移工具 South 的集成、静态文件处理和部署优化。这个文档是开发者深入理解 Django 1.6 并高效开发 Web 应用的重要资源。通过阅读和学习,...

    django-shop-example:django 商店的示例项目

    django-shop-example 一个在 django 1.8 上工作的 django ...pip uninstall south # fix setup.py issues with 3rdparty for django 1.8 python manage.py syncdb --no-initial-data python manage.py syncdb # to loa

    django-main_python_源码

    Django拥有庞大的生态系统,众多的第三方应用如South(数据库迁移工具)、Django Rest Framework(RESTful API开发)、Sorl.thumbnail(图片处理)等,使得Django可以应对各种复杂的应用场景。 总结,Django作为...

    Django-1.3.tar.gz

    1. **Django框架介绍** Django遵循模型-模板-视图(MTV)架构模式,简化了开发过程。模型负责数据模型的设计,模板用于定义页面布局,视图则处理用户请求并返回响应。此外,Django还包括内置的身份认证、表单处理、...

    cookiecutter-django-buildout:带有基于 cookiecutter 的构建模板骨架的 django

    cookiecutter-django-buildout 带有基于 cookiecutter 的构建模板骨架的 django作者: 亚当·库皮亚乌安装: 安装 cookiecutter ( ) $ pip install cookiecutter 构建模板$ ...engine,默认值:'south','south'、'n

    django-menu:简单的Django网站导航系统

    安装与配置: pip install django-menu 将menu添加到您的INSTALLED_APPS ./manage.py migrate menu (如果不使用South, ./manage.py syncdb 。应该使用South。) 将django.template.context_processors.request添加...

    django-cms:易于使用且对开发人员友好的CMS

    同时,它与许多其他Python库和Django应用兼容,如South(数据迁移工具)、dj-database-url(数据库配置解析)等。 **4. 社区和贡献** django-cms 参与了每年的 **Hacktoberfest** 活动,鼓励全球开发者为其开源项目...

    django-photomap:一个简单的 Django 应用程序,用于为用户提交的照片提供地图

    django-photomap 这是一个简单的 django 应用程序,它在地图上显示图像并允许用户提交它们。 ... 在您的settings.py makesure包括django.contrib.gis , stdimage , south , tastypie和photomap

    django-postgrespool:适用于Django的Postgres连接池,由SQLAlchemy提供支持

    Django-PostgresPool 这是一个简单的Postgres连接池后端,适用于Django 1.4+,由漂亮可爱SQLAlchemy提供支持。 用法 使用Django-PostgresPool很简单,只需将django_postgrespool设置为您的连接引擎即可: ...

    django-mynewsdesk:MyNewsDesk API 的 Django 包

    django-mynewsdesk Django 包安装使用您最喜欢的 Python 安装程序从 PyPI 安装它: pip install django-mynewsdesk快速开始将“mynewsdesk”添加到您的 INSTALLED_APPS 设置中,如下所示: INSTALLED_APPS = ( ......

    django1.3.7

    2. **ORM 和数据库管理** - 提供了对多种数据库的支持,如 SQLite、MySQL、PostgreSQL 和 Oracle,具备数据库迁移工具 South(尽管 1.7 版本后内建了迁移系统)。 3. **表单和验证** - 内置了处理 HTTP 表单的强大...

    PyPI 官网下载 | djangocms-stackable-plugins-0.2.4.tar.gz

    至于Python库,`djangocms-stackable-plugins`作为Python生态系统的一部分,可能会依赖其他Python库,如Django、Django CMS、South(用于数据库迁移)等。开发者在使用过程中需要注意这些依赖关系,确保所有必要的库...

    django脚手架

    6. **数据库迁移**:由于"django-groundwork"使用了Django 1.6,所以它可能依赖South进行数据库迁移。South是一种第三方库,用于管理数据库模式的变化。开发者需要创建和应用迁移文件以更新数据库结构,确保数据的...

    django-ueditor-plugin:django baidu ueditor 后台插件

    #django-ueditor-plugin 什么? 该插件是一个 django 后端软件,只需将其添加到您的 django 项目中,然后您就可以使用 ueditor ... for south : python manage.py migrate ueditor for django 1.7+ : python manage.

Global site tag (gtag.js) - Google Analytics