Flask-Migrate拓展数据库表结构
# 转载请留言联系
在我们用 sqlchemy 模块创建完几个表时,如果在实际生产环境中,需要对表结构进行更改,应该怎么办呢?总不能把表删除了吧,这样数据就会丢失了。
更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
操作示例:
1.首先需要安装 flask-migrate 模块,当然还有 flask-script 模块。
pip3 install flask-migrate
pip3 install flask-script
2.代码:
1 #coding=utf-8 2 from flask import Flask 3 4 from flask_sqlalchemy import SQLAlchemy 5 from flask_migrate import Migrate,MigrateCommand 6 from flask_script import Shell,Manager 7 8 app = Flask(__name__) 9 manager = Manager(app) 10 11 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test' 12 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True 13 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True 14 db = SQLAlchemy(app) 15 16 #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例 17 migrate = Migrate(app,db) 18 19 #manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令 20 manager.add_command('db',MigrateCommand) 21 22 #定义模型Role 23 class Role(db.Model): 24 # 定义表名 25 __tablename__ = 'roles' 26 # 定义列对象 27 id = db.Column(db.Integer, primary_key=True) 28 name = db.Column(db.String(64), unique=True) 29 user = db.relationship('User', backref='role') 30 31 #repr()方法显示一个可读字符串, 32 def __repr__(self): 33 return 'Role:'.format(self.name) 34 35 #定义用户 36 class User(db.Model): 37 __talbe__ = 'users' 38 id = db.Column(db.Integer, primary_key=True) 39 username = db.Column(db.String(64), unique=True, index=True) 40 #设置外键 41 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) 42 43 def __repr__(self): 44 return 'User:'.format(self.username) 45 46 47 if __name__ == '__main__': 48 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) 版本号
然后打开你的代码,可以发现他自动复原了!
转载于:https://www.cnblogs.com/chichung/p/9796412.html
Flask-Migrate拓展数据库表结构相关推荐
- 简洁好用的数据库表结构文档生成工具!
在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需要手动进行维护到文档中,很是繁琐.如果忘记一 ...
- zabbix数据库表结构简单解析
zabbix数据库表结构-持续更新 时间 2014-06-11 21:59:08 furion's blog 原文 http://www.furion.info/623.html 主题 MySQL ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- 比较数据库表结构之间的差异
在工作中常常会遇到升级的事情,对于不同的用户,有时所使用的数据库的表结构也会有一些不同,时间长了,往往就需要一份各版本数据库表结构的差异报告了.当你需要一份这样的报告时,你会怎么做?一个个的比较每个库 ...
- Java实现数据库表结构导出到Excel
2019独角兽企业重金招聘Python工程师标准>>> 本人自己写的一个工具,界面化,稍微配置即可数据库中的表的结构导出到Excel. 源码地址数据库表结构导出到Excel一键式工具 ...
- 开源数据库表结构文档生成器
大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 TJ君前几天和一个在银行科技部上班的同学聚会,同学跟TJ君吐槽,一些小银行的科技表面看上去专业,实际各种马虎不负责. 打个比方,有一次 ...
- 关系型数据库表结构的两个设计技巧
关系型数据库表结构的设计,有下面两个设计技巧: 物理主键作为关联的外键 关系型数据库,由多个数据表构成.每一个数据表的结构是相同的,不同表之间可能存在关联关系.表之间的关联关系,正是关系型数据库得名的 ...
- OSSIM主要数据库表结构
OSSIM主要数据库表结构 对于从事OSSIM开发的技术人员,最主要的需要知道OSSIM库里的多种表结构,下面举几个典型事例: /* ======== config表 ======== */ DROP ...
- python同步两张数据表_Python 如何实现数据库表结构同步
近日,某个QQ 群里的一个朋友提出一个问题,如何将一个DB 的表结构同步给另一个DB. 针对这个问题,我进行了思考与实践,具体的实现代码如下所示: # coding:utf-8 import pymy ...
最新文章
- Twitter在超分辨率技术上取得新进展,能还原打码图片
- 点击 UITableView 隐藏键盘
- 页面浏览事件之 $AppViewScreen 全埋点
- 数据结构——图-迪杰斯特拉算法
- 六一特辑丨“我的礼物我开发”这群小朋友在用新的方式对话未来
- php搜索所有路线,php包含文件路径查找规则
- python装饰器详解51-python装饰器使用实例详解
- android自定义组合view,安卓自定义view之组合view
- Android开发学习笔记:浅谈ToggleButton
- map在Sql中的传参 模糊查询limit分页
- 如何使用Affinity Designer for mac编辑矢量曲线和形状
- FFmpeg 基本用法
- 二叉树的建立 java_Java中二叉树的建立和各种遍历实例代码
- Atitit mysql redis mongodb 性能指标 目录 1.1. 二、 性能比较	1 1.2. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s	2 1
- 项目经理做项目的具体流程
- 计算机专业买啥样笔记本,高考结束,想学计算机专业,买台啥样的笔记本比较好,暑假自学c和cpp...
- Django的语言模板
- 个人身份认证接口介绍
- [爱奇艺]校招笔试(2017/9/11)
- 《数字图像处理》读书笔记2:数字图像处理基础