Flask-migrate

简介

  1. 通过命令行执行数据库操作
  2. 因为使用db.create_all()进行ORM映射时模型修改后需要删除原来的表才能重新映射新模型,所以使用flas-migrate来进行数据库迁移,通过命令行对被修改的模型进行新的映射

安装Flask-Migrate

  1. 进入虚拟环境并执行activate
  2. 执行pip install flask-migrate
(flask-env) C:\pyenv\flask-env\Scripts>pip install flask-migrate
Collecting flask-migrate
  Downloading Flask-Migrate-2.1.1.tar.gz
Requirement already satisfied: Flask>=0.9 in c:\pyenv\flask-env\lib\site-packages (from flask-migrate)
Requirement already satisfied: Flask-SQLAlchemy>=1.0 in c:\pyenv\flask-env\lib\site-packages (from flask-migrate)
Collecting alembic>=0.6 (from flask-migrate)
  Downloading alembic-0.9.5.tar.gz (990kB)
    100% |████████████████████████████████| 993kB 287kB/s
Requirement already satisfied: itsdangerous>=0.21 in c:\pyenv\flask-env\lib\site-packages (from Flask>=0.9->flask-migrate)
Requirement already satisfied: click>=2.0 in c:\pyenv\flask-env\lib\site-packages (from Flask>=0.9->flask-migrate)
Requirement already satisfied: Jinja2>=2.4 in c:\pyenv\flask-env\lib\site-packages (from Flask>=0.9->flask-migrate)
Requirement already satisfied: Werkzeug>=0.7 in c:\pyenv\flask-env\lib\site-packages (from Flask>=0.9->flask-migrate)
Requirement already satisfied: SQLAlchemy>=0.8.0 in c:\pyenv\flask-env\lib\site-packages (from Flask-SQLAlchemy>=1.0->flask-migrate)
Collecting Mako (from alembic>=0.6->flask-migrate)
  Downloading Mako-1.0.7.tar.gz (564kB)
    100% |████████████████████████████████| 573kB 187kB/s
Collecting python-editor>=0.3 (from alembic>=0.6->flask-migrate)
  Downloading python-editor-1.0.3.tar.gz
Collecting python-dateutil (from alembic>=0.6->flask-migrate)
  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
    100% |████████████████████████████████| 194kB 172kB/s
Requirement already satisfied: MarkupSafe>=0.23 in c:\pyenv\flask-env\lib\site-packages (from Jinja2>=2.4->Flask>=0.9->flask-migrate)
Collecting six>=1.5 (from python-dateutil->alembic>=0.6->flask-migrate)
  Downloading six-1.11.0-py2.py3-none-any.whl
Building wheels for collected packages: flask-migrate, alembic, Mako, python-editor
  Running setup.py bdist_wheel for flask-migrate ... done
  Stored in directory: C:\Users\Mark\AppData\Local\pip\Cache\wheels\c7\8d\a3\2a49034f68812a647c04bc467aa4a66af861126e99567a16bf
  Running setup.py bdist_wheel for alembic ... done
  Stored in directory: C:\Users\Mark\AppData\Local\pip\Cache\wheels\d1\0e\b9\fb570150b350298e1d8f1ff38a400ae709580b36e43bc3ac91
  Running setup.py bdist_wheel for Mako ... done
  Stored in directory: C:\Users\Mark\AppData\Local\pip\Cache\wheels\33\bf\8f\036f36c35e0e3c63a4685e306bce6b00b6349fec5b0947586e
  Running setup.py bdist_wheel for python-editor ... done
  Stored in directory: C:\Users\Mark\AppData\Local\pip\Cache\wheels\84\d6\b8\082dc3b5cd7763f17f5500a193b6b248102217cbaa3f0a24ca
Successfully built flask-migrate alembic Mako python-editor
Installing collected packages: Mako, python-editor, six, python-dateutil, alembic, flask-migrate
Successfully installed Mako-1.0.7 alembic-0.9.5 flask-migrate-2.1.1 python-dateutil-2.6.1 python-editor-1.0.3 six-1.11.0

(flask-env) C:\pyenv\flask-env\Scripts>

使用

  1. 使用flask-migrate必须使用flask-scripts这个模块中MigrateCommand包中包含了所有和数据库相关的命令
  2. flask-migrate的命令有三个:
    • python manager.py db init 准备迁移环境
    • python manager.py db migrate 迁移
    • python manager.py db upgrade 提交
  3. 模型有变动时需要在命令行执行 migrare upgrade重新映射到数据库
#---------manager.py----------
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Phone
from mark_app import app


manager = Manager(app)
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)


@manager.command
def runserver():
    print("服务器跑起来了...")


if __name__ == '__main__':
    manager.run()

"""
数据库相关操作都通过flask-migrate在manager.py中执行
主app文件中不需要再导入models,也不需要再使用db.crate_all()了
"""

-----------终端执行命令--------------
(flask-env) d:\git_project\flask_app>python manager.py db init
Creating directory d:\git_project\flask_app\migrations ... done
Creating directory d:\git_project\flask_app\migrations\versions ... done
Generating d:\git_project\flask_app\migrations\alembic.ini ... done
Generating d:\git_project\flask_app\migrations\env.py ... done
Generating d:\git_project\flask_app\migrations\README ... done
Generating d:\git_project\flask_app\migrations\script.py.mako ... done
Please edit configuration/connection/logging settings in 'd:\\git_project\\flask_app\\migrations\\alembic.ini' before proceeding.

(flask-env) d:\git_project\flask_app>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 'phone'
INFO  [alembic.autogenerate.compare] Detected removed table 'article_tag'
INFO  [alembic.autogenerate.compare] Detected removed table 'user'
INFO  [alembic.autogenerate.compare] Detected removed table 'dept'
INFO  [alembic.autogenerate.compare] Detected removed table 'userinfo'
INFO  [alembic.autogenerate.compare] Detected removed table 'tbl_test'
INFO  [alembic.autogenerate.compare] Detected removed table 'article'
INFO  [alembic.autogenerate.compare] Detected removed table 'girl'
INFO  [alembic.autogenerate.compare] Detected removed table 'products'
INFO  [alembic.autogenerate.compare] Detected removed table 'tag'
Generating d:\git_project\flask_app\migrations\versions\5f8edfb0ef2a_.py ... done

(flask-env) d:\git_project\flask_app>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  -> 5f8edfb0ef2a, empty message

(flask-env) d:\git_project\flask_app>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 column 'phone.price'
Generating d:\git_project\flask_app\migrations\versions\7cbcd5cc0bdd_.py ... done

(flask-env) d:\git_project\flask_app>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 5f8edfb0ef2a -> 7cbcd5cc0bdd, empty message

(flask-env) d:\git_project\flask_app>

你可能感兴趣的:(Flask)