文档章节

Migration: Python Django 1.7 的資料庫管理工具

 我的去哈哈
发布于 2015/04/26 11:24
字数 731
阅读 156
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Migration 為 Django 1.7 版中新增的管理資料庫工具,在以前版本是藉由 south 來達成。
目的是加速資料庫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/

粉丝 3
博文 57
码字总数 55253
作品 0
东城
私信 提问
加载中
请先登录后再评论。
Django中的多表操作

多表操作是常用的資料庫操作,如果不使用多表操作,建立資料庫是沒有意義的。 多表操作包含三種類型: 一對多 多對多 一對一 每一種類型又包含正向查詢及反向查詢兩個方向。 為了更好的練習多...

osc_0vv1t8wx
2019/11/25
1
0
Mozilla推出瀏覽器Python直譯器,提供完整資料科學主流套件 | iThome

Mozilla公開了能夠在瀏覽器上執行的Python直譯器Pyodide,Pyodide為一項實驗性質的Python計畫,不需要遠端kernel,就能夠在瀏覽器上運行,Mozilla的資料工程師Mike Droettboom稱Pyodide,是能...

2019/04/19
0
0
firebird database (快速入門)

參考文件(均可自firebird網站找到): Novice's Guide Migration from MS-SQL to firebird Firebord Release Notes 學習資料庫基礎是在sql的語法應用(請參考:firebird 網站的說明文件最好把這份...

小熊宝宝
2013/12/15
705
0
Porting OpenCV 2.3.1 to iPhone 3GS/4/4S

Porting OpenCV 2.3.1 to iPhone 3GS/4/4S - 如何使用cmake+Xcode編譯OpenCV 2.3.1函式庫給iOS使用 要能在Xcode中使用OpenCV 2.3.1函式庫來實作自己的程式首要之務當然是要能建立出符合iOS使...

晨曦之光
2012/05/28
623
0
bug跟踪管理系统--Bug Tracker

Bug Tracker 是一個国人以 PHP 寫成的軟體缺陷追蹤系統,它可以協助您管理軟體開發流程。它使用資料庫幫您記住軟體缺失、待增的功能、待辦事項,可以讓您在管理軟體開發時更有效率。 大 多數...

匿名
2009/01/11
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

FusionConputer热迁移过程记录

一、迁移原因   云平台集群内存资源不足,已超过设定阈值,内存资源已紧急告警。 二、解决思路   启用新集群,并将老集群中部分虚拟机热迁移至新集群 三、迁移的前提条件   1.被迁移虚...

osc_flwkfqx5
23分钟前
13
0
使用 ServerLess 实现云原生

笔者有幸经历了 IaaS(OS)、CaaS(Container),在这两年又听到了 FaaS(Funtion),这也是运维开发领域里的第三个阶段了吧,今天我将从一个不懂得开发的系统工程师视角以及结合之前的几篇系...

osc_t59f3rc0
24分钟前
18
0
作为软件测试的前辈你能不能给迷茫中的我一点建议?

一、为什么迷茫? 假如前面迷雾一片,作为司机的你,敢踩油门往前冲吗? 大多数人是不敢的。 因为你看不清自己的位置和发展的方向。 同理,一切对未来的恐慌、畏惧、纠结、迷茫,也是因为你看...

osc_auwur47t
26分钟前
12
0
神经机器翻译的直观解释

作者|Renu Khandelwal 编译|VK 来源|Towards Data Science 什么是神经机器翻译? 神经机器翻译是一种将一种语言翻译成另一种语言的技术。一个例子是把英语转换成印地语。让我们想想,如果你在...

osc_u61lmlkv
27分钟前
0
0
用Tableau实现动画数据可视化

作者|PRANAV DAR 编译|VK 来源|Analytics Vidhya 概述 动画可视化是一种艺术,它很容易在Tableau中创造出来 我们将在这里使用开源数据集,并在Tableau中创建自己的动画可视化 介绍 我是动画视...

osc_1oqjcug0
28分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部