flask-migrate的使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章