在上一遍文章中,咱們增長了兩個模型Questions
和Comments
,併爲Users
增長了avatar_path
這個字段,而後經過這段代碼更新到數據庫:python
with app.test_request_context(): db.drop_all() db.create_all()
由於當使用過db.create_all()
以後,再次直接使用db.create_all()
,對模型的修改並不會更新到數據庫,咱們要使用db.drop_all()
先把數據庫中全部的表先刪除掉,而後再db.create_all()
一次。聽上去是否是很麻煩?更糟糕的是,原先數據庫的的數據也就沒有了。因此咱們不用這種簡單粗暴的方式去更新數據庫結構,而是藉助flask-migrate
這個專門用於遷移數據庫的工具,它能夠在保留數據庫原始數據的狀況下,完成模型的更新。此外,咱們還將結合flask-script
一塊兒使用,簡單來講flask-script
讓咱們可使用命令行去完成數據庫遷移的操做。數據庫
在項目主文件夾下新建一個manage.py
,代碼以下:flask
from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from HarpQA import app, db from models import Users, Questions, Comments manager = Manager(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run()
首先導入相關的類,注意模型要所有導入過來,即便代碼中並無顯式地使用它們。而後傳入app
或db
來構建Manager
和Migrate
兩個類的實例,最後將MigrateCommand
的命令加入到manager
中。app
此時咱們假設要更新模型的結構,在models.py
的User
模型結尾添加一行代碼test = db.Column(db.Integer)
,而後點擊PyCharm下方的Terminal,自動進入到了虛擬環境的命令行中,輸入python manage.py db init
來初始化,這一步主要是創建數據庫遷移相關的文件和文件夾,只是在第一次須要使用。接着依次使用python manage.py db migrate
和python manage.py db upgrade
,待運行完成,查看users_infor
表的結構,結果以下:工具
能夠看到test
字段已經添加到表中了。spa