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
flask_migrate的更多相关文章
- flask组件之flask_script和flask_migrate的使用
flask_script的使用 作用: 使用命令启动flask项目 # 在项目的启动文件中 from flask import Flask from settings import Settings ...
- Flask插件---flask_script与flask_migrate
import app from flask_script import Manager from flask_migrate import Migrate,MigrateCommand my_app ...
- flask 与 flask_migrate的使用
flask 与 flask_migrate的使用 一.安装 pip install Flask-Migrate 二.简单使用 # 文件:manage.py from flask_migrate imp ...
- flask_migrate 的应用
怎么查看的命令: python manage.py --help 使用flask_migrate的注意事项:
- Flask_Migrate数据库迁移
migrate数据库迁移 有models,没有迁移仓库.本地新建数据库:首次创建迁移仓库.迁移脚本:执行迁移脚本生成数据库表: python manage.py db init python mana ...
- 一个web应用的诞生(7)--结构调整
现在所有的Py代码均写在default.py文件中,很明显这种方法下,一旦程序变的负责,那么无论对于开发和维护来说,都会带来很多问题. Flask框架并不强制要求项目使用特定的组织结构,所以这里使用的 ...
- 从零开始用 Flask 搭建一个网站(一)
前言 笔者之前未接触过 Python,只是略懂一点前端,所以说从零开始也相差无几吧.Flask 是一个轻量级的基于 Python 的框架,但是扩展性非常良好(Github 上 22000 多个 sta ...
- flask 扩展之 -- flask-mail
Flask-Mail 封装了 python 标准库 smtplib 包, 以便于更好的与 Flask 集成. 一. 安装 $ pip install flask-mail 二. 配置 及 初始化 Fl ...
- flask 扩展之 -- flask-sqlalchemy
flask-sqlalchemy.md 一. 安装 $ pip install flask-sqlalchemy 二. 配置 配置选项列表 : 选项 说明 SQLALCHEMY_DATABASE_UR ...
随机推荐
- Python入门1 —— 初识Python
一:Python介绍 1.Python是什么? Python是一门编程语言,编程语言是一门语言. 语言就是一个事物与另一个事物沟通的工具. 而编程语言则是人与计算机沟通的介质. 2.为什么要跟计算机沟 ...
- ubuntu18.04双卡机安装ubidia驱动遇到的坑
在ubuntu 18的软件更新中选择英伟达驱动进行安装,输入nvidia-smi总是提示缺少驱动,未驱动之类的报错. 何解? 最初以为安装系统的问题,重装ubuntu也未果. 最后查了很多资料,找到一 ...
- 实现排行榜神器——redis zset
需求:假如现在需要搞个 “运动消耗卡路里排行榜”,例似微信步数排名,显示排名前20人的信息和消耗的卡里路,怎样实现排序? 一般思路:存储信息,然后数据库查询,排序?(假如有几十万人参与排名,这样查my ...
- 调用原生硬件 Api 实现照相机 拍照和相册选择 以及拍照上传
一.Flutter image_picker 实现相机拍照和相册选择 https://pub.dev/packages/image_picker 二.Flutter 上传图片到服务器 ht ...
- HTML学习(17)URL
HTML 统一资源定位器(Uniform Resource Locators) URL - 统一资源定位器 Web浏览器通过URL从Web服务器请求页面. scheme://host.domain:p ...
- linux 安装tar 命令
yum install -y tar 查看版本 tar --version
- ASP.NET Core Web API中实现全局异常捕获与处理
处理全局异常 HANDLING ERRORS GLOBALLY 在上面的示例中,我们的 action 内部有一个 try-catch 代码块.这一点很重要,我们需要在我们的 action 方法体中处理 ...
- 7_4 素数环(UVa524)<回溯法和生成-测试法的比较>
有一个环(ring)是由n个圈圈所组成的(在这里n一定是个偶数),我们想要把1到n的自然数各放到一个圈圈中,使得相邻2个圈圈中的数的和一定是素数.下图为n=6的情形.请注意:第1个圈圈中的数一定是1. ...
- 「题解」「BZOJ-4668」冷战
题目 点这里 思路及代码 我们可以使用并查集的按秩合并(但是不要路径压缩). 两个集合被合并起来,连上的边的权值就设为当前时间. 然后我们可以发现,询问 \(j\) 与 \(k\) 何时联通,就是查询 ...
- DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL 未能在“xmlhttpRequest”上执行“open”:无效的URL。
出现这个报错主要是baseurl:http://192.168.*.*/后面的(/)或是请求里面的url:/user/login中前面的(/)有一个漏掉了,导致合成的路径不完整,所以报错:无效的URL