flask和django區別-資料庫的遷移
背景
在很多時候,在我們設計好模型之後,又需要進行一定的改變和更新資料操作;,最直接的方式就是刪除原來的舊錶,但是隨之而來的問題就是我們之前的資料也會刪除;那怎麼辦呢,
這時候就需要資料庫遷移框架了:
對於django而言,框架內部就集成了資料庫遷移模組了:
分為3步走:
1:修改modesl資料模型
2:生成遷移檔案migrations
python manage.py makemigrations
可以看出生成了一個名為migrations的檔案;
3:向資料庫執行遷移操作:
python manage.py migrate
這時候就完成了django的資料庫遷移操作;
對於flask相對要複雜一點,應為flask只有兩個核心組間:一個是用 Werkzeug(路由模組) ,另一個是Jinja2 ,如果你想
使用別的功能是需要進行安裝的
我們需要安裝的有
1:flask_migrate
2:flask_script
flask是通過flask_migrate實現資料庫的遷移的,並整合到flask_script中,讓操作,通過命令實現;
具體如下
#匯入模組
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigreateCommand
from flask_script import Manger
#生成app例項
app = Flask(__name__)
# 生成資料庫例項
db = SQLAlchemy(app)
# 生成flask_script例項通過Mange
manage = Manage(app)
# 生成遷移例項,需要用到app的例項和資料庫例項
migrater = Migrate(app,db)
# 向flask_script中新增db命令
manger.add_command('db',MigrateCommand)
# 更改資料模型(models類)
#定義模型Role class Role(db.Model): # 定義表名 __tablename__ = 'roles' # 定義列物件 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) def __repr__(self): return 'Role:'.format(self.name) #定義使用者 class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) def __repr__(self): return 'User:'.format(self.username)
if __name__ == '__main__':
manger.run()
這時候需要用到命令了:
具體步驟如下:
1:生成遷移檔案:
python database.py db init
2:生成遷移指令碼
python database.py db migrate -m 'initial migration'
3:更新資料庫:
python database.py db upgrade
如果你想回退你的遷移,需要用到命令:但是需要指定版本號;
通過python database.py db history 檢視遷移的版本
python database.py db downgrade 版本號
總結:
對比兩個框架可以明顯看出django要更加的方便一點;內部已經提供了遷移的功能,只需要將app註冊到installapp裡面,執行幾個命令就行了
但是對於flask而言,flask需要引入兩個元件:flask_migrate flask_script
一個遷移庫,一個命令庫;
但是flask多了一個回退版本的功能;
兩者在遷移的過程中的思路基本一致:
1:修改資料模型
2:生成遷移檔案
3:執行遷移
但是flask多了一個更新操作;