一、介绍
Flask-Migrate是Flask框架中的一个扩展,用于数据库迁移。在使用Flask时,为了保证数据结构和表与每个环境中的需求的一致性,需要在更新迭代时改变数据库结构。
二、安装
在开始使用Flask-Migrate之前,需要先安装。
1.使用pip安装
pip install Flask-Migrate
2.在requirements.txt文件中添加
Flask-Migrate
三、使用Flask-Migrate
Flask-Migrate中的核心命令是flask db
,它包含三个子命令:init、migrate和upgrade。
1.初始化
初始化可以理解为在项目中创建一个迁移Repository,即记录您数据库的当前状态。
flask db init
执行成功后,会在工程目录下生成一个名为migrations
的文件夹。
2.迁移
在进行表结构变更之后,执行下面的命令。Flask-Migrate会检测表结构变动并生成迁移脚本。
flask db migrate -m "message"
其中,-m
选项用于描述迁移信息。
3.升级
输入下面的命令将迁移应用到数据库中。
flask db upgrade
如果需要降级,可以使用命令:
flask db downgrade
四、示例
1.初始化Repository
flask db init
成功后会先在项目的根目录下生成一个migrations
文件夹,并在其中生成一个名为versions的文件夹,该文件夹用于存储迁移信息的版本记录。
2.创建数据库模型
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
content = db.Column(db.String(1024))
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
author = db.relationship('User', backref='articles')
3.生成迁移脚本
应用已缩小的业务来创建迁移脚本
flask db migrate -m "create user and article"
执行成功后,会在migrations
目录下的versions
文件夹中生成一个Python脚本,该脚本包含对模型的修改。
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '956d99064bb6'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
op.create_table('user',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('username', sa.String(length=80), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('username')
)
op.create_table('article',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=255), nullable=True),
sa.Column('content', sa.String(length=1024), nullable=True),
sa.Column('author_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
def downgrade():
op.drop_table('article')
op.drop_table('user')
4.更新数据库
在更新迁移表之前,必须先确定要连接的数据库(建议使用环境变量进行设置),例如使用Postgres作为数据库时,需要在终端中添加以下命令
export FLASK_APP=app
export FLASK_ENV=development
export DATABASE_URL=postgresql://localhost/flasktest
此时,使用升级命令更新迁移表
flask db upgrade
将更新应用到实际的数据库中。如果需要回退已应用的迁移,可以使用:
flask db downgrade
五、总结
通过Flask-Migrate扩展,我们可以很方便地在Flask框架中管理数据库结构的更新迭代。第一次使用Flask-Migrate时,需要先初始化一个Repository,然后创建数据库模型,在每次结构变动后使用Flask-Migrate检测记录变动后的表信息,并生成迁移脚本。最后,应用迁移命令将迁移信息更新到数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程 - Python技术站