Part1: South基础

欢迎阅读South教程;我们将试着介绍South的基本使用,而且会给你关于其他事情的一些常用技巧。

如果你从来没听说过迁移库,可以先看看 什么是迁移;它可以帮你更好的理解South和其他,如django-evolution,目的是要得到什么。

教程假设你已经正确安装了South;若是没有,请看 安装指示

开始

在教程中,我们在一个全新的app上使用迁移,并详细描述该过程。如果已经存在app也不用担心,我们会在下一部分介绍。

注意到的第1件事是,South是每个应用程序都有的;迁移和app的代码存储在一起的[1]。如果一个app没有任何迁移定义,它就和普通的那样操作(意思是,使用syncdb)。

[1]  你可以把它们放在你喜欢的任何地方。

好,现在找一个project进行工作(或者新建一个,设置好数据库和其他),我们建一个新的app:

./manage.py startapp southtut

通常,会生成一个新目录 southtut/。 先把它添加到 INSTALLED_APPS;然后打开新建的 southtu/models.py,创建一个新的模型:

from django.db import models

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()

它非常简单,但是有效。不要使用 syncdb 在我们的数据库中创建该模型的数据表,我们将为它生成一个迁移。

第1个迁移

South创建迁移的方法有好几种;有自动的,有手动的。作为入门用户,你一般使用两个自动方法: --initial和--auto。

--auto 检查前一个迁移,算出有什么改变,生成一个迁移以应用这个差异。 如你往模型中添加了一个字段, --auto会注意到这点,生成一个迁移,为该字段在模型的表中创建一个新的列。

当然,你注意到 --auto需要有前一个迁移,而我们的新app没有。所以在这种情况下,我们需要使用 --initial,用它为app中的所有模型创建表和索引;它是你首先要使用的,更多的像 syncdb, 在这之后的每次改变就可以使用--auto。

所以,让我们创建第1个迁移:

$ ./manage.py schemamigration southtut --initial
Creating migrations directory at '/home/andrew/Programs/litret/southtut/migrations'...
Creating __init__.py in '/home/andrew/Programs/litret/southtut/migrations'...
 + Added model southtut.Knight
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate southtut

(如果它失败了,抱怨 south_migrationhistory不存在,那是你在安装South之后,忘记了运行 syncdb)

你可以看到,它为我们创建了一个迁移目录,并在其中生成了一个新的迁移。我们所需要做的是应用我们的新迁移:

$ ./manage.py migrate southtut
 Running migrations for southtut:
 - Migrating forwards to 0001_initial.
 > southtut:0001_initial
 - Loading initial data for southtut.

就这样,South为我们的模型创建了新表,若你喜欢可以做些检查,使用 ./manage.py shell打开交互界面,试着添加一些圆桌骑士。

更改模型

迄今为止,我们做的事情和使用syncdb能完成的没什么差别,到时间来改变这个了(准确的说是,我们的模型)。让我们在模型中增加另外一个字段:

from django.db import models

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()
    dances_whenever_able = models.BooleanField()

现在,如果我们没有使用迁移,在我们的southtu_knight表中显示这个新的列将会是非常令人厌倦。然而使用了South,我们只需要两个简单的步骤: 为改变生成一个迁移,然后应用它。

首先,生成新的迁移,使用 --auto特征:

$ ./manage.py schemamigration southtut --auto
 + Added field dances_whenever_able on southtut.Knight
Created 0002_auto__add_field_knight_dances_whenever_able.py. You can now apply this migration with: ./manage.py migrate southtut

(注意,South自动为迁移选择了一个名字;你可以把自定义的名字作为另外一个参数提供给它)

现在,应用改变:

$ ./manage.py migrate southtut
Running migrations for southtut:
 - Migrating forwards to 0002_auto__add_field_knight_dances_whenever_able.
 > southtut:0002_auto__add_field_knight_dances_whenever_able
 - Loading initial data for southtut.

随即,我们的新列就创建好了。回到交互界面并检查,你能将能够添加骑士,它们会在可能的时间里跳舞。

转换已存在的apps

有时,特别是在把South引用进一个项目时,你想在已存在的apps中使用它,其中一种情况是表已经被创建好了。

这种情况和全新的app在添加迁移时是不同的,你应当阅读转换一个app以获得更多的操作信息。

在你愉快的完成South的基本使用之后,请移步 Part2:高级改变

时间: 2024-11-13 06:50:54

Part1: South基础的相关文章

回归预测及R语言实现 Part1 回归基础综述

Part1 回归基础综述 回归方法有很多种,最常见的是线性回归(又有一元和多元之分).多项式回归.非线性回归.另外还将简单说明对预测结果的检验方法.   线性回归 一元线性回归,是最简单最常见的回归模型,类似初中数学中的一元一次方程,它的基本模型如下: 我们常见的一元线性回归方程一般没有最后一项,确切的说,我们在实际的应用中也忽略了最后一项.最后一项ui的现实意义是:它是指除自变量x以外所有对因变量y有影响的其他因素,应用回归预测时,我们假设ui是一个均值为零的随机变量,方差为常值,不同ui间相

【信息学奥赛一本通】Part1.2 基础算法-二分与三分

问题 A: [二分和三分]愤怒的牛 题目描述 农夫约翰建造了一座有n间牛舍的小屋,牛舍排在一条直线上,第i间牛舍在xi的位置,但是约翰的m头牛对小屋很不满意,因此经常互相攻击.约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍.也就是要最大化最近的两头牛之间的距离. 牛们并不喜欢这种布局,而且几头牛放在一个隔间里,它们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是多少呢? 输入 第一行用空格分

#[Composer学习笔记]Part2:添加路由

在Part1的基础上,为项目添加路由: 增加路由扩展:这里选择macaw,在composer中的扩展包为: codingbean/macaw 编辑composer.json文件: {   "require": {     "codingbean/macaw": "dev-master"     } } 保存,并执行: composer.phar update 这时,vendor下就多了 codingbean 文件夹 编辑路由规则 创建config

TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learners(译)

这篇教程分为两部分,第一部分用例子解释基础概念,第二部分构建逻辑回归模型. Part-1: TensorFlow基础 TensorFlow是一个数据流经过的图,数据表示为n维向量,图由数据和操作组成. 节点:数学操作 边:数据 TensorFlow跟其他编程语言不同之处在于不论你想创建什么都必须先创建一幅蓝图,默认初始化是不包含任何变量的. sankit@sankit:~$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8

体系结构与操作系统拾遗

体系结构与操作系统拾遗 Part1. 体系结构基础 1. 冯·诺依曼体系结构 计算机处理的数据和指令一律用二进制数表示 顺序执行程序 计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序. 计算机硬件由运算器.控制器.存储器.输入设备和输出设备五大部分组成. 2. 数据的机内表示 二进制表示 机器数 由于计算机中符号和数字是一样的,都必须用二进制数串来表示,因此,正负号也必须用 0.1

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

jsp servlet基础复习 Part1

jsp和servlet的一些基础知识整理,用于备忘. 一.jsp与servlet的基本关系 1.jsp-->web容器-->servlet-->加载进容器的虚拟机执行-->输出执行结果给浏览器端 在这个过程,所有位于<%%>之外的值,都被认为是out.println()中的内容进行直接输出.详细理解看代码 <html> <% //例子说明:servlet和jsp的关系 boolean b = false; if(b){ %> 这里是内容一 <

计算机基础part1

一:计算机的基本组成 1.计算机由输入单元.控制单元.算法逻辑单元.输出单元.存储单元,五大单元组成 二:概念篇 CPU:中央处理器,其内含有指令集(取码-解码-执行的过程) CPU同一时刻只能干一件事情,从内存取出指令码解码执行. 硬盘:用于存储信息.分为机械式磁盘(基于磁)和固态硬盘(基于电). 寄存器:因CPU运行速度快,而内存速度慢,未充分利用CPU效率而产生的,其空间小于内存,一般采用CPU材质.位于CPU内, 所有CPU内部都有一些用来保存关键变量和临时数据的寄存器. 虚拟内存:许多

python基础之try异常处理、socket套接字基础part1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异