Flask-migrate

来源:互联网 发布:绿色傲剑2绝学升级数据 编辑:程序博客网 时间:2024/06/06 20:24

简介

  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-migrateCollecting flask-migrate  Downloading Flask-Migrate-2.1.1.tar.gzRequirement 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/sRequirement 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/sCollecting python-editor>=0.3 (from alembic>=0.6->flask-migrate)  Downloading python-editor-1.0.3.tar.gzCollecting python-dateutil (from alembic>=0.6->flask-migrate)  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)    100% |████████████████████████████████| 194kB 172kB/sRequirement 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.whlBuilding 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\082dc3b5cd7763f17f5500a193b6b248102217cbaa3f0a24caSuccessfully built flask-migrate alembic Mako python-editorInstalling collected packages: Mako, python-editor, six, python-dateutil, alembic, flask-migrateSuccessfully 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 Managerfrom flask_migrate import Migrate,MigrateCommandfrom exts import dbfrom models import Phonefrom mark_app import appmanager = Manager(app)migrate = Migrate(app, db)manager.add_command('db', MigrateCommand)@manager.commanddef 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 initCreating directory d:\git_project\flask_app\migrations ... doneCreating directory d:\git_project\flask_app\migrations\versions ... doneGenerating d:\git_project\flask_app\migrations\alembic.ini ... doneGenerating d:\git_project\flask_app\migrations\env.py ... doneGenerating d:\git_project\flask_app\migrations\README ... doneGenerating d:\git_project\flask_app\migrations\script.py.mako ... donePlease 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 migrateINFO  [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 upgradeINFO  [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 migrateINFO  [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 upgradeINFO  [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>
原创粉丝点击