Migration: Python Django 1.7 的資料庫管理工具
2015-04-26 00:00
141 查看
Migration 為 Django 1.7 版中新增的管理資料庫工具,在以前版本是藉由 south 來達成。
目的是加速資料庫schema更新的程序並提供資料庫的版本控制。
migration 中的檔案為均為自動生成,該檔案紀錄著各版本 model 的資料庫schema的差異以及版本間的相依性(dependency)。
創建初始時是空的僅有 _init_.py 檔,在app模型(model.py)完成後,可藉由指令自動生成 migration 檔案。
再將 test_model 插入 setting.py 中的 INSTALLED_APPS
./mysite/mysite/setting.py
一併將 app 中的 model.py 編輯成這裡用的測試檔案
./mysite/test_model/models.py
上述指令會自動幫 test_model 中的 model.py 生成 migration 檔案。
若不填app名稱則對所有Django會自動對所有 INSTALLED_APPS 執行
Django 1.7 版中,每次對 model 作更動,要同步至 database 前都需要作
首次次呼叫指令時,migration 生成的檔名為 0001_initial.py,之後使用會依版本序號和更改的內容或時間來生成檔名。
例如:0002_testmodel_newfield.py 或 0003_auto_2014XXXX_XXXX.py
注意:
1.資料庫更改後,新增的 schema 都要填入 default 值,否則會出現下列狀況要求額外輸入預設值。
2.各序號檔案彼此均有相依性,新版本會延續舊版本再加上更新項目,因此不能把舊的migration檔刪除。
test_model為app名稱,0001為要更新目標的版本編號。
藉由這個版本編號,
若省略版本編號則自動更新到最新版,而省略app名稱則會對所有app執行
資料庫的檔案及格式會依 setting.py 中 DATABASES 的資訊生成,預設是生成在project底下db.sqlite3 (此例中就是./mysite/db.sqlit3)
資料庫的內容可用資料庫瀏覽器 (如:sqlitebrowser) 檢視。
https://docs.djangoproject.com/en/1.7/topics/migrations/
目的是加速資料庫schema更新的程序並提供資料庫的版本控制。
使用流程
用 Django 1.7 建立 app 時,app 底下會多出一個名為 migration 的次組件(subpackage)。migration 中的檔案為均為自動生成,該檔案紀錄著各版本 model 的資料庫schema的差異以及版本間的相依性(dependency)。
創建初始時是空的僅有 _init_.py 檔,在app模型(model.py)完成後,可藉由指令自動生成 migration 檔案。
測試環境建構
可藉由下列指令來創建 project (mysite) 及 app (test_model)。$django-admin.py startproject mysite $python manage.py startapp test_model
再將 test_model 插入 setting.py 中的 INSTALLED_APPS
./mysite/mysite/setting.py
INSTALLED_APPS = ( 'test_model',)
一併將 app 中的 model.py 編輯成這裡用的測試檔案
./mysite/test_model/models.py
class testModel(models.Model): name = models.CharField(max_length=20)
migration 檔案生成
完成上述環境建構後就能用makemigrations測試啦
$python manage.py makemigrations test_model
上述指令會自動幫 test_model 中的 model.py 生成 migration 檔案。
若不填app名稱則對所有Django會自動對所有 INSTALLED_APPS 執行
makemigrations。
Django 1.7 版中,每次對 model 作更動,要同步至 database 前都需要作
makemigrations。
首次次呼叫指令時,migration 生成的檔名為 0001_initial.py,之後使用會依版本序號和更改的內容或時間來生成檔名。
例如:0002_testmodel_newfield.py 或 0003_auto_2014XXXX_XXXX.py
注意:
1.資料庫更改後,新增的 schema 都要填入 default 值,否則會出現下列狀況要求額外輸入預設值。
You are trying to add a non-nullable field 'comment' to test_model without a defa ult; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) #在此手動輸入預設值 2) Quit, and let me add a default in models.py #離開,重新在*model.py*中增加預設值
2.各序號檔案彼此均有相依性,新版本會延續舊版本再加上更新項目,因此不能把舊的migration檔刪除。
資料庫更新
做完migration類別的檔案後,需再用migrate的指令來生成或更新資料庫。
$python manage.py migrate test_model 0001
test_model為app名稱,0001為要更新目標的版本編號。
藉由這個版本編號,
migrate指令可將特定的app資料庫schema更新或返回先前版本。
若省略版本編號則自動更新到最新版,而省略app名稱則會對所有app執行
migrate。
資料庫的檔案及格式會依 setting.py 中 DATABASES 的資訊生成,預設是生成在project底下db.sqlite3 (此例中就是./mysite/db.sqlit3)
資料庫的內容可用資料庫瀏覽器 (如:sqlitebrowser) 檢視。
先前版本差異
1.7版中,更新資料庫的動作需要 migration 類別,因此即使用syncdb同步資料前,也要先
makemigration。
https://docs.djangoproject.com/en/1.7/topics/migrations/
相关文章推荐
- Ubuntu14.04+Python3.4+apache2.4+Django1.7站点发布笔记
- Django1.7+python 2.78+pycharm配置mysql数据库教程
- Django1.7+python 2.78+pycharm使用mysql数据库
- python34+Django1.7+mysql5.5环境搭建(win7)
- CentOS + Python3.3 + Django1.7 + uwsgi + nginx + mysql web发布环境搭建
- win7下面安装python3.4+django1.7遇到的问题及解决
- django 1.7 新的migration框架,取代south
- django1.7 与python3.4结合连接mysql数据库
- python Django 1.7 中文入门 (官网) 01 开始
- python Django 1.7 中文入门 (官网) 02 django安装设置
- django 1.7 新的migration框架,取代south
- 手把手教你:Ubuntu14+apache2+django1.7+python2.7下网页/网站部署
- python Django 1.7 中文入门 (官网) 03 django安装测试
- Mac 10.10下Python2.7+Django1.7+MySQL5.5环境搭建
- python Django 1.7 中文入门 (官网) 04 设计model
- python Django 1.7 中文入门 (官网) 05 第一个项目1_1
- python Django 1.7 中文入门 (官网) 06 第一个项目1_2
- django 1.7 新的migration框架,取代south
- 在pythonanywhere上搭建django程序(Virtualenv+python2.7+django1.7+)
- Python3.4+Django1.7+SQLite3实现增删改查