django schema migration

本文介绍了Django中用于数据库迁移的South工具的使用方法,包括安装、配置、初始迁移、自动ORM以及已存在应用的迁移过程。通过示例展示了如何通过South管理数据库模式的变化,确保模型修改与数据库同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

syncdb 只能初始化table(create),不能自动update/delete/drop。

那么south应运而生。


south简单用法:

安装:

   pip install South


安装完后,加入到INSTALLED_APPS中,并syncdb一下,否则会出现south_migrationhistory 表找不到。

(注:此时syncdb的行为被south改变了,注意命令行输出,表south_migrationhistory的结构如下:



测试安装:

  manage.py shell

 >> import south


建立一个test_south的app,并建立模型south_test,加入一个字段name。 将app添加到INSTALLED_APPS中。

from django.db import models

class south_test(models.Model):
    name = models.CharField(max_length=100)
# Create your models here.


第一次使用:

  manage.py  schemamigration your_app --initial   

  manage.py migrate your_app

本例中,your_app自然是test_south,下面是发生了神马(注意黄色加亮部分):


这一步,只是生成了用于创建数据库表的迁移文件,主要是0001_initial.py,内容如下:




这一步,才真正生成了数据库模型,并且在south_migrationhistory添加了一条记录。

数据表south_migrationhistory 插入了一条记录,如下:



后续自动ORM:

  manage.py  schemamigration your_app --auto

  manage.py migrate your_app

 

为了演示,假设现在,由于需求变化,我们修改模型test_south.south_test,添加字段 memo,如下:

from django.db import models

class south_test(models.Model):
    name = models.CharField(max_length=100)
    memo = models.CharField(max_length=100)

我们不再执行syncdb,改为执行 schemamigration /  migrate, 如下:


创建了一个0002的文件,如下:



migrate之前,我们看下south_test表


执行migrate,如下:


再次查看数据库表south_test


我们再次观察下south_migrationhistory表,如下:


==========================

对于已经存在的app,加入south很简单,命令如下:

manage.py convert_to_south your_app

它只是在表south_migrationhistory里面添加一条记录(同时生成迁移文件)。

假设我们这里的your_app是books,那么south_migrationhistory的记录如下:


(注意:如果代码加入了版本控制---比如svn,那么其他人下载代码后,需要执行manage.py migrate myapp 0001 --fake,因为convert_to_south总是会尝试创建所有已经存在了的表,通过这个命令告诉south,myapp已经创建了这些表,它不需要再次创建了。以后就按照正常的迁移来做:

  manage.py syncdb

后面如果有修改模型,则执行

  manage.py  shemamigration myapp --auto

  manage.py migrate myapp



更多信息,可以参考这里:http://south.readthedocs.org/en/latest/tutorial/part1.html#tutorial-part-1


转载请注明来自:http://blog.csdn.net/lion_awake/article/details/38283621,谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值