7.ORM與SQLAlchemy (3) - flask-migrate數據庫遷移

在上一遍文章中,咱們增長了兩個模型QuestionsComments,併爲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()

首先導入相關的類,注意模型要所有導入過來,即便代碼中並無顯式地使用它們。而後傳入appdb來構建ManagerMigrate兩個類的實例,最後將MigrateCommand的命令加入到manager中。app


此時咱們假設要更新模型的結構,在models.pyUser模型結尾添加一行代碼test = db.Column(db.Integer),而後點擊PyCharm下方的Terminal,自動進入到了虛擬環境的命令行中,輸入python manage.py db init來初始化,這一步主要是創建數據庫遷移相關的文件和文件夾,只是在第一次須要使用。接着依次使用python manage.py db migratepython manage.py db upgrade,待運行完成,查看users_infor表的結構,結果以下:工具

clipboard.png

能夠看到test字段已經添加到表中了。spa

相關文章
相關標籤/搜索