django 從1.7版本開始起增長了一個新的數據遷移功能,在以前若是你數據models文件作了修改,若是是已經上線的項目就很是麻煩了,要反覆測試不少次才能在正式庫上修改,操做風險相對比較高,固然在1.6版本前也有第三方的數據遷移工具,例如south,在1.7版本前你們用這個作數據遷移的比較多,但如今從1.7版本開始就自帶數據遷移功能了,由於django1.8是官方永久性支持版本,因此本篇咱們是在1.8環境下的操做,若是還用老版本的兄弟,建議儘快切換新版本,老版本都官方都不在支持了,數據遷移功能對老版本用戶來講,這個功能算是比較新的功能,有想用django1.8開發的朋友,就要了解數據遷移功能如何使用了,咱們今天就來看看如何使用該功能,首先創建咱們的models文件,假設咱們的models.py文件內容以下:python
class Post(models.Model):數據庫
author = models.ForeignKey(User)django
title = models.CharField(max_length=150)app
text = models.TextField()運維
created_date = models.DateTimeField(blank=True, null=True)ide
這是一個典型的博客文章model,有了這個model,咱們如何讓數據庫也創建相應的表呢,以前的用syncdb,但如今咱們就要用migrate, 另外須要注意的是sysdb這個命令在1.9版本就沒有了。工具
由於我以前已經同步一次數據庫,因此爲了瞭解這個功能的強大,我在models裏增長一條語句,修改以下:post
class Post(models.Model):測試
author = models.ForeignKey(User)spa
title = models.CharField(max_length=150)
text = models.TextField()
created_date = models.DateTimeField(blank=True, null=True)
published_date = models.DateTimeField(blank=True, null=True)
首先咱們生成遷移腳本,運行:
python manage.py mkaemigrations
Migrations for 'blog':
0004_post_published_date.py:
- Add field published_date to post
運維完後並數據庫並無發生變化,只是生成了要操做數據庫的一些腳本文件,感興趣的能夠去migrations目錄裏查看。
接下來運行:
python manage.py migrate
輸出:
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying blog.0004_post_published_date... OK
看到已經將published_date這個字段增長上了,你在數據庫裏會看到這個字段,若是你在運行makemigrations,會獲得:
No changes detected
這代表你作的修改都已同步到數據庫中,沒有可改變的了,這個例子是展現的是增長字段,若是你是第一次運行,原理也是同樣,就更簡單了,因此有了migrate,之後model的的任何改變,例如增長,刪除,修改,都先makemigrations, 而後migrate二步就完成了與數據庫的同步。