在做項目的過程中,我們都遇到過,經常需要修改我們數據庫的字段,在flask中,是通過ORM(對象關系映射)來創建數據庫的,表--->model class,字段---->屬性
在flask中,我們是通過第三方插件SQLAlchemy來創建數據庫表,采用的是db.create_all()方法,這樣,在我們修改數據庫的Model的字段之后,想要同步數據庫,就只能通過刪除表,然后重新調用db.create_all()來完成。
所以,flask引入了flask_script 和 flask_migrate(pip install)來解決這個問題:
1、新建manager.py文件,編寫如下:
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommond
from app import app
from apps.models.base import db
manager = Manager(app)
# 要使用flask-migrate,必須先綁定db和app
migrate = Migrate(app, db)
# 將MigrateCommand添加到manager中,"db"是自定義命令
manager.add_command("db", MigrateCommond)
if __name__ == "__main__":
manager.run()
2、打開終端,進入項目根目錄,執行下面命令
python manager.py db init
初始化成功后,你的項目目錄多了一個migrattions文件夾
3、然后每次在修改了model的字段后,執行下面的命令
python manager.py db migrate
從執行過程中我們可以看到我們修改的字段
執行完成后,再去查看生成的migrations文件夾,下面的versions里面會多出來一個.py的遷移腳本文件,檢查表格及字段
3、更新數據庫
python manager.py db upgrade
upgrade會自動讀取剛才生成的文件,將數據更新到數據庫中。
執行完成后,檢查你的數據庫,發現數據庫字段按照我們的需要更新了。
【注1: python manager.py db migrate 將模型生成遷移文件,只要模型修改了,就執行一次這個命令】
【注2:python manger.py db upgrade 將遷移文件真正映射到數據庫中,每次運行了migrate命令,就要記得運行這個命令,不然數據庫中的信息是不會被修改的。】
【注3:記得要把對應的模型引入到manager.py文件中,不然執行命令是不會起作用的哦^_^】
4、回滾事物
1)運行 python manager.py db history
查看歷史版本,得到history-id
2)運行 python manager.py db downgrade history-id
回退到指定歷史版本