# 转载请留言联系

在我们用 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拓展数据库表结构相关推荐

  1. 简洁好用的数据库表结构文档生成工具!

    在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需要手动进行维护到文档中,很是繁琐.如果忘记一 ...

  2. zabbix数据库表结构简单解析

    zabbix数据库表结构-持续更新 时间 2014-06-11 21:59:08  furion's blog 原文  http://www.furion.info/623.html 主题 MySQL ...

  3. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  4. 比较数据库表结构之间的差异

    在工作中常常会遇到升级的事情,对于不同的用户,有时所使用的数据库的表结构也会有一些不同,时间长了,往往就需要一份各版本数据库表结构的差异报告了.当你需要一份这样的报告时,你会怎么做?一个个的比较每个库 ...

  5. Java实现数据库表结构导出到Excel

    2019独角兽企业重金招聘Python工程师标准>>> 本人自己写的一个工具,界面化,稍微配置即可数据库中的表的结构导出到Excel. 源码地址数据库表结构导出到Excel一键式工具 ...

  6. 开源数据库表结构文档生成器

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 TJ君前几天和一个在银行科技部上班的同学聚会,同学跟TJ君吐槽,一些小银行的科技表面看上去专业,实际各种马虎不负责. 打个比方,有一次 ...

  7. 关系型数据库表结构的两个设计技巧

    关系型数据库表结构的设计,有下面两个设计技巧: 物理主键作为关联的外键 关系型数据库,由多个数据表构成.每一个数据表的结构是相同的,不同表之间可能存在关联关系.表之间的关联关系,正是关系型数据库得名的 ...

  8. OSSIM主要数据库表结构

    OSSIM主要数据库表结构 对于从事OSSIM开发的技术人员,最主要的需要知道OSSIM库里的多种表结构,下面举几个典型事例: /* ======== config表 ======== */ DROP ...

  9. python同步两张数据表_Python 如何实现数据库表结构同步

    近日,某个QQ 群里的一个朋友提出一个问题,如何将一个DB 的表结构同步给另一个DB. 针对这个问题,我进行了思考与实践,具体的实现代码如下所示: # coding:utf-8 import pymy ...

最新文章

  1. Twitter在超分辨率技术上取得新进展,能还原打码图片
  2. 点击 UITableView 隐藏键盘
  3. 页面浏览事件之 $AppViewScreen 全埋点
  4. 数据结构——图-迪杰斯特拉算法
  5. 六一特辑丨“我的礼物我开发”这群小朋友在用新的方式对话未来
  6. php搜索所有路线,php包含文件路径查找规则
  7. python装饰器详解51-python装饰器使用实例详解
  8. android自定义组合view,安卓自定义view之组合view
  9. Android开发学习笔记:浅谈ToggleButton
  10. map在Sql中的传参 模糊查询limit分页
  11. 如何使用Affinity Designer for mac编辑矢量曲线和形状
  12. FFmpeg 基本用法
  13. 二叉树的建立 java_Java中二叉树的建立和各种遍历实例代码
  14. Atitit mysql redis mongodb 性能指标 目录 1.1. 二、 性能比较 1 1.2. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s 2 1
  15. 项目经理做项目的具体流程
  16. 计算机专业买啥样笔记本,高考结束,想学计算机专业,买台啥样的笔记本比较好,暑假自学c和cpp...
  17. Django的语言模板
  18. 个人身份认证接口介绍
  19. [爱奇艺]校招笔试(2017/9/11)
  20. 《数字图像处理》读书笔记2:数字图像处理基础

热门文章

  1. 几种常用的图像处理函数库
  2. 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值
  3. Python 或将成为法国高中的官方编程教学语言
  4. 消息队列的四大典型使用场景
  5. Blogengine-BlogRoll的两个bug
  6. 第10章 嵌入式linux的调试技术
  7. Annotations
  8. EF 4.1中内部经常提交的 exec sp_reset_connection 的用途原来是为了重用池中的连接...
  9. 2010版CCNP教材一览【图文】
  10. C++--day06