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 相关文章推荐
用Python编写简单的微博爬虫
Mar 04 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
详解Django中间件执行顺序
Jul 16 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Django学习笔记之为Model添加Action
Apr 30 Python
python aiohttp的使用详解
Jun 20 Python
python函数的万能参数传参详解
Jul 26 Python
python logging日志模块原理及操作解析
Oct 12 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
Python - 10行代码集2000张美女图
May 23 Python
python 实现体质指数BMI计算
May 26 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
简单的PHP多图上传小程序代码
2011/07/17 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
php 常用的系统函数
2017/02/07 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
jQuery的学习步骤
2011/02/23 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
对比分析json及XML
2014/11/28 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
python解决字典中的值是列表问题的方法
2013/03/04 Python
python实现简单socket通信的方法
2016/04/19 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
详解Python是如何实现issubclass的
2019/07/24 Python
如何基于python生成list的所有的子集
2019/11/11 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
大学生毕业求职简历的自我评价
2013/10/24 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
团队队名口号大全
2014/06/06 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
如何利用Python实现一个论文降重工具
2021/07/09 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL