flask-migrate的使用

本文详细介绍了如何使用Flask-Migrate进行数据库迁移,包括初始化数据库、生成迁移脚本及执行升级过程。通过与Django的ORM对比,展示了Flask-Migrate在Flask应用中的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

精选30+云产品,助力企业轻松上云!>>> hot3.png

manager.py代码如下:

from flask_script import Manager, Shell, Server
from flask_migrate import Migrate, MigrateCommand
from app.ext import db
from app import create_app

app = create_app()

manager = Manager(app=app)
migrate = Migrate(app, db)


def make_shell_context():
	return dict(app=app)


manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command("run_dev", Server(use_debugger=True, use_reloader=True))
manager.add_command("runserver", Server())
manager.add_command("db", MigrateCommand)


@manager.command
def deploy():
	"""run deployment tasks"""
	pass


if __name__ == "__main__":
	manager.run(default_command="runserver")

执行python manager.py db 查看参数说明

@MacBook-Pro-2 Garen % python manager.py db
usage: Perform database migrations

Perform database migrations

positional arguments:
  {init,revision,migrate,edit,merge,upgrade,downgrade,show,history,heads,branches,current,stamp}
    init                Creates a new migration repository
    revision            Create a new revision file.
    migrate             Alias for 'revision --autogenerate'
    edit                Edit current revision.
    merge               Merge two revisions together. Creates a new migration
                        file
    upgrade             Upgrade to a later version
    downgrade           Revert to a previous version
    show                Show the revision denoted by the given symbol.
    history             List changeset scripts in chronological order.
    heads               Show current available heads in the script directory
    branches            Show current branch points
    current             Display the current revision for each database.
    stamp               'stamp' the revision table with the given revision;
                        don't run any migrations

创建数据库操作

  • 初始化数据库

init命令会创建一个新的版本仓库,并且会生成migrations文件夹.这点类似django.

(Garen) zhouwanghua@MacBook-Pro-2 Garen % python manager.py db init
  Creating directory /Users/zhouwanghua/Code/Garen/migrations ...  done
  Creating directory /Users/zhouwanghua/Code/Garen/migrations/versions ...  done
  Generating /Users/zhouwanghua/Code/Garen/migrations/script.py.mako ...  done
  Generating /Users/zhouwanghua/Code/Garen/migrations/env.py ...  done
  Generating /Users/zhouwanghua/Code/Garen/migrations/README ...  done
  Generating /Users/zhouwanghua/Code/Garen/migrations/alembic.ini ...  done
  Please edit configuration/connection/logging settings in '/Users/zhouwanghua/Code/Garen/migrations/alembic.ini'
  before proceeding.

  • 创建version表

执行upgrade之后会在数据中创建一个alembic_version表

(Garen) zhouwanghua@MacBook-Pro-2 Garen % python manager.py db upgrade
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

  • 生成models对象的迁移脚本

如果有新的表或字段改动都需要使用这个命令,类似django的makemigrations

(Garen) zhouwanghua@MacBook-Pro-2 Garen % python manager.py db migrate
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'reply'
  Generating /Users/zhouwanghua/Code/Garen/migrations/versions/d5e95964b986_.py ...  done

  • 在执行迁移命令upgrade

执行迁移脚本,创建/维护表

(Garen) zhouwanghua@MacBook-Pro-2 Garen % python manager.py db upgrade
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> d5e95964b986, empty message

总结:

flask-migrate与django自带的orm的理念是一样的.migrate == django的makemigrations upgrade==django的migrate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值