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之??碌某?? target=
Sep 12 Python
python求pi的方法
Oct 08 Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
用Python读取几十万行文本数据
Dec 24 Python
python3实现逐字输出的方法
Jan 23 Python
Python多线程threading模块用法实例分析
May 22 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
Python常见反爬虫机制解决方案
Jun 01 Python
python 实现德洛内三角剖分的操作
Apr 22 Python
Python OpenCV形态学运算示例详解
Apr 07 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
mysql limit查询优化分析
2008/11/12 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现数组插入新元素的方法
2015/05/22 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
初中数学教学反思
2014/01/16 职场文书
学生保证书
2015/01/16 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书