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多线程编程简单介绍
Apr 13 Python
python使用nntp读取新闻组内容的方法
May 08 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
Python爬虫代理IP池实现方法
Jan 05 Python
python使用pyqt写带界面工具的示例代码
Oct 23 Python
django Serializer序列化使用方法详解
Oct 16 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
详解Python为什么不用设计模式
Jun 24 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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 array的学习笔记
2012/05/16 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
PHP 实现链式操作
2021/03/09 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
Python基于PycURL实现POST的方法
2015/07/25 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
详解python3中的真值测试
2018/08/13 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
快速了解Python开发环境Spyder
2020/06/29 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
学校联谊活动方案
2014/02/15 职场文书
优质服务演讲稿
2014/05/14 职场文书
领导干部保密承诺书
2014/08/30 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
《观潮》教学反思
2016/02/17 职场文书