文档章节

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

 我的去哈哈
发布于 2015/04/26 11:24
字数 731
阅读 52
收藏 0
点赞 0
评论 0

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
东城
Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew

Virtualenv 和 Pythonbrew 都是可以創造虛擬(獨立)Python 環境的工具,只是虛擬(獨立)標的不同。 Virtualenv 可以隔離函數庫需求不同的專案,讓它們不會互相影響。在建立並啟動虛擬環境後...

jack_cheng
2013/10/11
0
0
Red Hat 翻新 JBoss 開發平台 跨入NoSQL市場

JBoss Data Grid 6,將提供Java及其他軟體使用NoSQL資料庫的能力。Red Hat將該軟體設定為能管理、使用大量資料又能快速反應的資料庫,具有容易擴展節點及容錯的特性。 Linux大廠Red Hat宣布,...

oschina
2012/06/22
1K
4
python 的 开发利器之 Virtualenv 与 Pythonbrew

Virtualenv 和 Pythonbrew 都是可以創造虛擬(獨立)Python 環境的工具,只是虛擬(獨立)標的不同。 Virtualenv 可以隔離函數庫需求不同的專案,讓它們不會互相影響。在建立並啟動虛擬環境後...

首席安全砖家
2013/10/27
0
0
WEB框架之---Django初级篇

一、下载与安装(Windows版) 下载地址:https://www.djangoproject.com/download/ 或者通过命令:pip install django==1.11.2进行安装(Python3使用pip3)推荐使用此版本 安装完成后找到dja...

AltBoy
06/26
0
0
Django 1.7 自带migrations用法及源码

Django下一个版本是1.7,增加了类似South的migration功能,修改Model后可以在不影响现有数据的前提下重建表结构。这真是个千呼万唤始出来的feature了,所以做个简单的整理分享。文章包含部分...

best_raven
2015/02/03
0
0
bug跟踪管理系统--Bug Tracker

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

匿名
2009/01/11
1K
0
Laravel 5 测试用例 记录

目標 如何在開發的過程中加入測試。 Model Repository Controller Auth 範例 建立一個需要登入的文章發表系統。 使用者登入登出 文章列表、新增文章 雖然簡單,但足夠我們對 Laravel 5 有基本...

游鱼彩虹
2016/12/26
42
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
293
0
2012 年十大最成功开源项目

2012年過去了,各開源項目的表現如何?NetworkWorld 的開源專家Alan Shimel總結了在2012年全球十個最為成功的開源項目,從而不難看出IT業界在2013年的新趨勢。 第一個是Apache Hadoop,海量數...

oschina
2013/01/14
12.1K
61
PHP亡命之徒:又髒又快的完成CRUD程序

嗨! 每次實作新想法、或是幫客戶做小型專案時,總有一些瑣碎動作。 我開發了一個library,用又髒又快的方法完成常見的CRUD任務。 主要功能就是 能夠在 HTML裡面定義出schema 不需要migrati...

尤川豪
2014/07/14
583
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python PIPEs

https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm

zungyiu
4分钟前
0
0
gRPC学习笔记

gRPC编程流程 1. proto文件定义 proto文件用于定义需要通过gRPC生成的接口,可以理解为接口定义文档 2. 通过构建工具生成服务基类代码-Maven或Gradle 3. 服务端开发 服务端实现类须实现通过构...

OSC_fly
24分钟前
0
0
Docker Mac (三) Dockerfile 及命令

Dockerfile 最近学习docker的时候,遇到一件怪事,关于docker镜像可能会被破坏,还不知道它会有此措施 所以需要了解构建Dockerfile的正确方法 Dockerfile是由一系列命令和参数构成的脚本,这些命...

___大侠
51分钟前
0
0
Android Studio+NDK+Cmake 移植FFmpeg-4.0.2命令行工具

一、编译 参考大神的帖子,亲测一次编译成功:https://blog.csdn.net/bobcat_kay/article/details/80889398 鉴于以前查文档的经验,这里附上编写例子的时间:2018年7月22日 我用的是ubantu,...

她叫我小渝
51分钟前
0
0
mysql创建数据库

登录MYSQL mysql -u root -p 脚本创建数据库WeChat,并制定默认的字符集是utf8mb4。 CREATE DATABASE Wechat DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 授权 grant all......

niithub
今天
0
0
svn: Unable to connect to a repository URL 的解决方案

错误图示: 解决办法:清除本地保存的授权信息; 1:右键点击本地文件夹,选择设置; TortoiseSVN -> Settings 2:在弹出的对话框中选择 Saved Data, 右侧选择:授权地方清理所有。 然后点确...

宁哥实战课堂
今天
1
0
sleep与wait的区别

Thread.sleep(XXX)方法消耗CPU吗? 这个知识点是我之前认识一直有错误的一个知识点,在我以前的认识里面,我一直认为Thread.sleep(1000)的这一秒钟的时间内,线程的休眠是一直占用着CPU的时间...

码代码的小司机
今天
1
0
20位活跃在Github上的国内技术大牛 leij 何小鹏 亚信

本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔? 1. lifesinger(玉伯) Github主页: https://github.com/lifesinger 微博:@ 玉伯也叫射雕 玉伯(王保平),...

海博1600
今天
1
0
Mybatis收集配置

一、Mybatis取Clob数据 1、Mapper.xml配置 <resultMap type="com.test.User" id="user"> <result column="id" property="id"/> <result column="json_data" property="jsonData" ......

星痕2018
今天
1
0
centos7设置以多用户模式启动

1、旧版本linux系统修改inittab文件,在新版本执行vi /etc/inittab 会有以下提示 # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON......

haha360
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部