1. 程式人生 > >flask和django區別-資料庫的遷移

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多了一個更新操作;