flask_migrate
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
最新文章
- iOS开发系列--Objective-C之协议、代码块、分类
- java设计模式之观察者模式
- php内核探索 [转]
- Android开发学习之路-GSON使用心得(OCR图片识别)
- 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
- IDC机房网络测试要求
- 【转】jquery两稳定版本比较~~
- yii 验证用户名是否存在 	 				array(";name";,";unique";,&#39;message&#39;=>;&#39;用户名已经存在&#39;),
- C++11之后,对源代码增加了UTF8和UCS4的支持(Windows内部使用Unicode,因为nt内核用的是ucs2,那是89年,utf8到了92年才发明出来)
- xTree学习
- java工程打包成jar包,并且解压lib里的jar包
- 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
- HDU2036 改革春风吹满地
- entity framework core在独立类库下执行迁移操作
- [TJOI2015]旅游
- CentOS7 修改MAC地址
- WIndows下将文件夹映射为磁盘
- 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
- CoffeeScript简介 <;二>;
- Html Email 邮件html页编写指南
热门文章
- 用控制台编译和运行,输出HelloWorld
- VMare安装及虚拟机的安装
- [termux Linux] termux不用ssh远程控制shell
- Docker - ubuntu 镜像安装网络工具
- Makefile中的wildcard/notdir/patsubst
- ubuntu 下的ftp详细配置
- java到js的中文无法显示,中文显示位(?)
- yii components文件到底应该放些什么代码
- python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。
- 你知道for(;;) vs. while(true)那个更快吗?