Flask数据库迁移简单介绍


Posted in Python onOctober 24, 2017

前言

用过Django的小伙伴都知道,Django的ORM是自带的,比较特殊,而且集成了很多功能,比如数据库迁移…
何为ORM,个人之见解,简化sql语句的书写,将关系型数据库的一张张表转化为了python的类,最大的好处是简化了学习成本,不会sql语句的程序员也能平滑的使用数据库,并且天生防sql注入。flask可以使用SQLAlchemy,包名为flask-sqlalchemy.至于具体用法翻译的官方文档讲的也足够清楚。大家直接谷歌跟着文档就能搞定,本篇主要讲如何进行数据库迁移。

flask的小工具

大家从Django转至Flask最明显的一个差异就是,flask直接运行就可以启动服务,Django是使用了runserver来进行运行。至于好坏大家自行斟酌。这里提一个插件。flask-script。pip安装即可。

from flask_script import Manager
......
manager = Manager(app)
......
#app.run() #注释这句
manager.run()

这样,启动的方式变为 python main.py runserver

这似乎有点画蛇添足,实则不然,这和我们下面要讲的数据库迁移有很大的联系。

数据库迁移

需要用的的插件 flask-migrate
安装之

main.py

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////opt/db.sqlite' #使用sqlite3数据库
db = SQLAlchemy(app) #ORM

migrate = Migrate(app,db)
manager = Manager(app)
manager.add_comman('db',MigrateCommand) #添加db 命令(runserver的用法)

#一个用户表
class User(db.Model):
...
...
省略

if __name__ == '__main__':
 manager.run()

这样,准备工作已经就绪。
运行python main.py db init创建数据表。并且会在你项目下生成migrations/目录,保存你数据库每次变更的内容。

修改User类。

python main.py db migrate 提交修改
python main.py db upgrade 执行修改

再看User表,已经改变。

python main.py db downgrade 回退修改

有一点注意的:SQLite3不能删除有值的列…所以,大家就不要删除列了…

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
python读取word文档的方法
May 09 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python如何生成网页验证码
Jul 28 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
如何基于Python实现数字类型转换
Feb 07 Python
Pygame的程序开始示例代码
May 07 Python
如何用python写个模板引擎
Jan 14 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 #Python
Scrapy的简单使用教程
Oct 24 #Python
详解python里使用正则表达式的分组命名方式
Oct 24 #Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 #Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 #Python
浅谈python中copy和deepcopy中的区别
Oct 23 #Python
python的构建工具setup.py的方法使用示例
Oct 23 #Python
You might like
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
js实现表格筛选功能
2017/01/18 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
深入理解Python中装饰器的用法
2016/06/28 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
关于责任的演讲稿
2014/05/20 职场文书
项目转让协议书
2014/10/27 职场文书
2014年质检工作总结
2014/11/26 职场文书
稽核岗位职责
2015/02/10 职场文书
高中物理教学反思
2016/02/19 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js