由于模型中經常會新加一行或幾行column (比如用來保存賬戶的確認狀態),此時要修改 models.py,并執行一次新數據庫遷移(能夠保存之前的數據),Flask-Migrate可以實現這個功能。
from app import create_app, db
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
第一次使用:
1.初始化:(venv) python manage.py db init 這個命令會在項目下創建 migrations 文件夾,所有遷移腳本都存放其中。
2.創建第一個版本:(venv) $ python manage.py db migrate -m "initial migration" 檢查migrations\versions,會新建一個版本.py,檢查里面表格及字段
3.運行升級 (venv) $ python manage.py db upgrade,會把項目使用的數據庫文件,更新為新的表格、字段,同時保留數據
以上操作會在項目目錄下生成一個migration目錄,以及數據庫中新增一張version表。
后續數據庫遷移:
python manage.py db migrate
python manage.py db upgrade
遇到的問題:
數據庫無法遷移,報錯如下:
alembic.util.exc.CommandError: Can't locate revision identified by 'a570bb807bff
問題原因:數據庫版本對不上
解決方案:刪除數據庫中的version表,刪除migration目錄
來源:
https://stackoverflow.com/questions/20973145/cannot-complete-flask-migration