flask_migrate

1.      flask_migrate

doc: https://flask-migrate.readthedocs.io/en/latest/

1.1.    简介

在使用falsk_sqlalchemy时,采用db.create_all()创建表,但在后期修改数据库表字段的时候,修改部分不会自动的映射到数据库中,必须删除表然后重新创建;否则就只能手动sql修改表结构了。

这样当然不好用,flask-migrate就是为了解决这个问题。它可以在每次修改模型(class)后,执行相应命令将修改的字段映射到数据库中。

1.2.    install/uninstall

pip install Flask-Migrate

pip uninstall Flask-Migrate

1.3.    使用

有两种调用方式,flask db init,  python manage.py db init

后一种方式用得比较多。

案例:

#!/usr/bin/env python

#coding:utf-8

 

from app import create_app, db

from flask_migrate import Migrate, MigrateCommand

from flask_script import Manager

import app.models # 没有循环引用,可以直接引用

app = create_app()

manager = Manager(app)

migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)

if __name__ == '__main__':

manager.run()

pass

    #run_app()

然后执行以下3条命令:

创建迁移仓库(migrations目录),就是初始化:

python manager.py  db init

读取类的内容, 生成版本文件, 并没有真正在数据库中添加或删除;

python manage.py  db migrate -m "添加性别"

python manage.py db migrate

在数据库中增删改;

python manage.py  db upgrade

其它命令:

去查看改变的历史状态;

python manage.py  db history

返回指定的版本状态;

python manage.py  db downgrade  base

2.      实验

2.1.    修改models.py并同步到数据库

修改roles,添加字段

add_comments = db.Column(db.String(200), nullable=True)

执行命令:

python manage.py db migrate

可以查看日志中有

INFO  [alembic.autogenerate.compare] Detected added column 'roles.add_comments'

提交到数据库, python manage.py db upgrade 输出日志

INFO  [alembic.runtime.migration] Running upgrade 136f6a80c853 -> cc904c7ceb92, empty mes

sage

结果验证:

sql_txt = "show columns from roles;"

[('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'), ('name', 'varchar(64)', 'YES', 'UNI', None, ''), ('add_comments', 'varchar(200)', 'YES', '', None, '')]

结果验证2:python manage.py  db history

136f6a80c853 -> cc904c7ceb92 (head), empty message

<base> -> 136f6a80c853, empty message

最新文章

  1. iOS开发系列--Objective-C之协议、代码块、分类
  2. java设计模式之观察者模式
  3. php内核探索 [转]
  4. Android开发学习之路-GSON使用心得(OCR图片识别)
  5. 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
  6. IDC机房网络测试要求
  7. 【转】jquery两稳定版本比较~~
  8. yii 验证用户名是否存在 array(&quot;name&quot;,&quot;unique&quot;,&#39;message&#39;=&gt;&#39;用户名已经存在&#39;),
  9. C++11之后,对源代码增加了UTF8和UCS4的支持(Windows内部使用Unicode,因为nt内核用的是ucs2,那是89年,utf8到了92年才发明出来)
  10. xTree学习
  11. java工程打包成jar包,并且解压lib里的jar包
  12. 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
  13. HDU2036 改革春风吹满地
  14. entity framework core在独立类库下执行迁移操作
  15. [TJOI2015]旅游
  16. CentOS7 修改MAC地址
  17. WIndows下将文件夹映射为磁盘
  18. 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
  19. CoffeeScript简介 &lt;二&gt;
  20. Html Email 邮件html页编写指南

热门文章

  1. 用控制台编译和运行,输出HelloWorld
  2. VMare安装及虚拟机的安装
  3. [termux Linux] termux不用ssh远程控制shell
  4. Docker - ubuntu 镜像安装网络工具
  5. Makefile中的wildcard/notdir/patsubst
  6. ubuntu 下的ftp详细配置
  7. java到js的中文无法显示,中文显示位(?)
  8. yii components文件到底应该放些什么代码
  9. python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。
  10. 你知道for(;;) vs. while(true)那个更快吗?