鋒哥原創的Flask3??Python Web開發?Flask3視頻教程:
2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili
模型類(表)不是一成不變的,當你添加了新的模型類,或是在模型類中添加了新的字段,甚至是修改了字段的名稱或類型,都需要更新表。如果我們不在乎數據的話,可以刪除表,然后重新生成新表。
在開發時,以刪除表再重建的方式更新數據庫簡單直接,但明顯的缺陷是會丟掉數據庫中的所有數據。在生產環境下,你絕對不會想讓數據庫里的數據都被刪除掉,這時你需要使用數據庫遷移工具來完成這個工作。SQLAlchemy的開發者Michael Bayer寫了一個數據庫遷移工具——Alembic來幫助我們實現數據庫的遷移,數據庫遷移工具可以在不破壞數據的情況下更新數據庫表的結構。蒸餾器(Alembic)是煉金術士最重要的工具,要學習SQL煉金術( SQLAlchemy),我們當然要掌握蒸餾器的使用。
我們安裝下flask-Migrate庫
pip install flask-Migrate -i https://pypi.tuna.tsinghua.edu.cn/simple
然后創建migrate對象
# 實例化Migrate
migrate = Migrate(app, db)
做數據遷移的時候,第一步就是要創建遷移環境
終端執行命令:
flask db init
項目目錄下會自動創建migrations目錄及子文件。
接著StudentModle添加一個remark字段
我們執行生成下遷移腳本,-m是添加備注信息
flask db migrate -m "t_student add remark field"
versions目錄下生成了遷移文件:
"""t_student add remark fieldRevision ID: fa43fee367b2
Revises:
Create Date: 2025-03-23 12:39:18.130872"""
from alembic import op
import sqlalchemy as sa# revision identifiers, used by Alembic.
revision = 'fa43fee367b2'
down_revision = None
branch_labels = None
depends_on = Nonedef upgrade():# ### commands auto generated by Alembic - please adjust! ###with op.batch_alter_table('t_student', schema=None) as batch_op:batch_op.add_column(sa.Column('remark', sa.Text(), nullable=True))# ### end Alembic commands ###def downgrade():# ### commands auto generated by Alembic - please adjust! ###with op.batch_alter_table('t_student', schema=None) as batch_op:batch_op.drop_column('remark')# ### end Alembic commands ###
最后我們執行遷移文件,更新數據庫,通過upgrade命令:
flask db upgrade
執行完后,t_student表就多了remark字段: