首先感谢django团队,在这一版本里django自身提供了数据迁移功能——migration
数据迁移¶
修改Model后可以在不影响现有数据的前提下重建表结构。
以往的解决方案是South(于是South成为了django必备的,最受欢迎的应用。)¶
原理¶
django的migration功能,类似与South的migration功能。
开始一个新的项目¶
django-admin.py startproject mysite
## Create the tables in the database before we can use them.
python manage.py migrate
## Create superuser.
python manage.py createsuperuser
创建app:¶
python manage.py startapp myblog
##1.7版django这一步时会创建一个migrations/目录
##settings.py
INSTALLED_APPS =(
####
'myblog',
)
##models.py
class Article(models.Model):
title = models.CharField(max_length=18, null=True)
生成数据表¶
(覆盖了syncdb功能,不过别担心,syncdb仍然还有~)
python manage.py makemigrations myblog
运行结果如下
Migrations for ‘myblog’:
0001_initial.py:
- Create model Article
看看生成了哪些文件
ls myblog/migrations/
__init__.py 0001_initial.py
修改models,添加一个author属性¶
class Article(models.Model):
title = models.CharField(max_length=18, null=True)
author = models.OneToOneField(User, null=True)
生成数据表(修改后)¶
python manage.py makemigrations myblog
##运行结果
Migrations for ‘myblog’:
0002_article_author.py:
- Add field author to article
我们来看看他重新生成数据表时干了些什么 从上一个migration中获取之前的Model列表,写到set中. 获取现有的model列表,写入set中。 * 遍历这两个set的差集,获取差集Model中所有的field,如果field的定义相同,就询问用户是否是一个rename的model,否则视为创建。
数据迁移(migrate)¶
python manage.py migrate myblog
That's all 以上是个人对migration的理解,求纠错和指点~~