如何使用Flask-Migrate拓展数据库表结构


Posted in Python onJuly 24, 2019

前言

在我们用 sqlchemy 模块创建完几个表时,如果在实际生产环境中,需要对表结构进行更改,应该怎么办呢?总不能把表删除了吧,这样数据就会丢失了。

更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。

在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。

操作示例:

1.首先需要安装 flask-migrate 模块,当然还有 flask-script 模块。

pip3 install flask-migrate
pip3 install flask-script

2.代码:

#coding=utf-8
from flask import Flask

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Manager

app = Flask(__name__)
manager = Manager(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db) 

#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)

#定义模型Role
class Role(db.Model):
  # 定义表名
  __tablename__ = 'roles'
  # 定义列对象
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(64), unique=True)
  user = db.relationship('User', backref='role')

  #repr()方法显示一个可读字符串,
  def __repr__(self):
    return 'Role:'.format(self.name)

#定义用户
class User(db.Model):
  __talbe__ = 'users'
  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(64), unique=True, index=True)
  #设置外键
  role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

  def __repr__(self):
    return 'User:'.format(self.username)


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

主要注意第8行-20行,48行。要把原来的代码改成这样。

3.命令行的操作

创建迁移仓库

这个命令会创建 migirations 文件夹,所有迁移文件都放在里面

python3 xxx.py db init

注:db 是20行决定了,可以更改

自动创建迁移脚本

python3 xxx.py db migrate -m"版本名(注释)"

更新数据库

python3 xxx.py db upgrade

当我们需要修改表结构时,直接在 xxx.py 里直接增删相应的代码

修改完成后,继续创建新的迁移脚本

python 文件 db migrate -m"新版本名(注释)"

更新数据库

python3 xxx.py db upgrade

更新完之后,其实就是提交操作,类似于 git 添加一个新的版本。

但是,如果我们想返回历史的版本,应该怎么操作呢?

先查看版本号

python xxx.py db history

然后记住想要返回的版本号。

返回指定的版本

python xxx.py db downgrade(upgrade) 版本号

然后打开你的代码,可以发现他自动复原了!

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

Python 相关文章推荐
python益智游戏计算汉诺塔问题示例
Mar 05 Python
复习Python中的字符串知识点
Apr 14 Python
Python的Django框架中的数据过滤功能
Jul 17 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
Python操作SQLite数据库过程解析
Sep 02 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
Python定时任务工具之APScheduler使用方式
Jul 24 #Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 #Python
Django的用户模块与权限系统的示例代码
Jul 24 #Python
python3字符串操作总结
Jul 24 #Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 #Python
django如何自己创建一个中间件
Jul 24 #Python
django如何通过类视图使用装饰器
Jul 24 #Python
You might like
Terran建筑一览
2020/03/14 星际争霸
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
Django REST framework内置路由用法
2019/07/26 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
UNIX文件系统分类
2014/11/11 面试题
网上商城创业计划书范文
2014/01/31 职场文书
销售冠军获奖感言
2014/02/03 职场文书
闭幕式主持词
2014/04/02 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
2014年妇女工作总结
2014/12/06 职场文书
校长个人总结
2015/03/03 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS