如何使用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调用C语言开发的共享库方法实例
Mar 18 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
python实现将汉字保存成文本的方法
Nov 16 Python
对python中大文件的导入与导出方法详解
Dec 28 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
jupyter notebook实现显示行号
Apr 13 Python
Python eval函数原理及用法解析
Nov 14 Python
详细介绍python类及类的用法
May 31 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
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
JS编程小常识很有用
2012/11/26 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
Python编写打字训练小程序
2019/09/26 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python属于解释语言吗
2020/06/11 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
中秋节超市促销方案
2014/01/30 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
超市创意活动方案
2014/08/15 职场文书
公证委托书格式
2014/09/13 职场文书
平安家庭事迹材料
2014/12/20 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
Nginx速查手册及常见问题
2022/04/07 Servers