Python_Flask_简单博客系统开发:数据库迁移——Migrate

使用Flask-Migrate完成数据库更新升级,Flask-Migrate插件是基于Alembic,Alembic是由大名鼎鼎的SQLAlchemy作者开发数据迁移工具。

操作步骤:

  1. 安装Flask-Migrate插件
(venv) $ pip install Flask-Migrate
  1. 修改Flask App部分的代码,以增加Migrate相关的Command
db = SQLAlchemy(app)
migrate = Migrate(app, db)
 
manager = Manager(app)
manager.add_command('db', MigrateCommand)
  1. 初始化
python manage.py db init
  1. 创建迁移仓库

首先还是需要安装flask-migrate插件

(venv) $ pip install flask-migrate

然后,我们来看下如何完成初始化

manage.py

from flask.ext.migrate import Migrate, MigrateCommand 
 
# ...
 
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

在数据库迁移可以维护之前,必须通过init子命令来创建一个迁移库:

(venv) $ python manage.py db init

这个命令创建一个migrations文件夹,里面存放了所有迁移脚本。

  Creating directory /home/adark0915/PycharmProjects/flasky/migrations ... done
  Creating directory /home/adark0915/PycharmProjects/flasky/migrations/versions
  ... done
  Generating /home/adark0915/PycharmProjects/flasky/migrations/README ... done
  Generating /home/adark0915/PycharmProjects/flasky/migrations/script.py.mako ... done
  Generating /home/adark0915/PycharmProjects/flasky/migrations/alembic.ini ... done
  Generating /home/adark0915/PycharmProjects/flasky/migrations/env.pyc ... done
  Generating /home/adark0915/PycharmProjects/flasky/migrations/env.py ... done
  Please edit configuration/connection/logging settings in
  '/home/adark0915/PycharmProjects/flasky/migrations/alembic.ini' before
  proceeding.

  1. 创建迁移脚本
(venv) $ python hello.py db migrate -m "initial migration"

在Alembic,数据库迁移工作由迁移脚本完成。这个脚本有两个函数,分别叫做upgrade()和downgrade()。upgrade()函数实施数据库更改,是迁移的一部分,downgrade()函数则删除它们。

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added column 'users.default'
INFO  [alembic.autogenerate.compare] Detected added column 'users.permissions'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_default' on '['default']'
  Generating /home/adark0915/PycharmProjects/flasky/migrations/versions/d5ddba7501
  2e_initial_migration.py ... done
  1. 更新数据库
(venv) $ python hello.py db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> d5ddba75012e, initial migration
/home/adark0915/PycharmProjects/flasky/venv/local/lib/python2.7/site-packages/alembic/util/messaging.py:69: UserWarning: Skipping unsupported ALTER for creation of implicit constraint
  warnings.warn(msg)

这样,就完成了数据库的更新升级。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,224评论 22 257
  • 今天又是忙碌的一天。昨晚就计划好今天要早去。六点起来做饭,比往常晚了一小时,走的时候又是匆匆忙忙没吃上一口饭。...
    如意and奕茹阅读 314评论 2 10
  • 《成功人士9件事的不同做法》这本书里,就把乐观分成两种,一种是“现实的乐观主义者”,另一种是“不现实的乐观主义者”...
    烈日逐风阅读 371评论 0 0
  • 这几天情绪动荡,好像有负能量干扰。感赏群里姐妹们及时出招,纠正我的错误,给迷茫中的我又一次指明了方向,让...
    高金伟阅读 91评论 1 3