数据库迁移操作顺序:

  • 1.python 文件 db init
  • 2.根据需求修改模型
  • 3.python flaskapp文件 db migrate -m"新版本名(注释)"
  • 4.python flaskapp文件 db upgrade 然后观察表结构
  • 5.若返回版本,则利用 python 文件 db history查看版本号
  • 6.python 文件 db downgrade(upgrade) 版本号

首先要在虚拟环境中安装Flask-Migrate。

  1. pip install flask-migrate

flaskapp代码文件内容,如果项目比较大则需要拆成三个文件:

  1. #coding=utf-8
  2. from flask import Flask
  3. from flask_sqlalchemy import SQLAlchemy
  4. from flask_migrate import Migrate,MigrateCommand
  5. from flask_script import Shell,Manager
  6. app = Flask(__name__)
  7. manager = Manager(app)
  8. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'
  9. app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
  10. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
  11. db = SQLAlchemy(app)
  12. #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
  13. migrate = Migrate(app,db)
  14. #manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
  15. manager.add_command('db',MigrateCommand)
  16. #定义模型Role
  17. class Role(db.Model):
  18. # 定义表名
  19. __tablename__ = 'roles'
  20. # 定义列对象
  21. id = db.Column(db.Integer, primary_key=True)
  22. name = db.Column(db.String(64), unique=True)
  23. user = db.relationship('User', backref='role')
  24. #repr()方法显示一个可读字符串,
  25. def __repr__(self):
  26. return 'Role:'.format(self.name)
  27. #定义用户
  28. class User(db.Model):
  29. __talbe__ = 'users'
  30. id = db.Column(db.Integer, primary_key=True)
  31. username = db.Column(db.String(64), unique=True, index=True)
  32. #设置外键
  33. role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  34. def __repr__(self):
  35. return 'User:'.format(self.username)
  36. if __name__ == '__main__':
  37. manager.run()

创建迁移仓库

  • 这个命令会创建migrations文件夹,所有迁移文件都放在里面。
  1. python database.py db init # 将database.py替换为有manager.run()的执行文件

创建迁移脚本

  • 自动创建迁移脚本有两个函数

    • upgrade():函数把迁移中的改动应用到数据库中。
    • downgrade():函数则将改动删除。
  • 自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容。
  • 对比不一定完全正确,有可能会遗漏一些细节,需要进行检查
  1. python database.py db migrate -m 'initial migration' # 第一次迁移不要使用 - m

更新数据库

  1. python database.py db upgrade

返回以前的版本

  • 可以根据history命令找到版本号,然后传给downgrade命令:
  1. python app.py db history
  2. 输出格式:<base> -> 版本号 (head), initial migration
  • 回滚到指定版本
  1. python app.py db downgrade 版本号

Flask-migrate基本使用方法的更多相关文章

  1. python flask实现小项目方法

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走. 下载源码,运行 pip install -r requirements.txt 建立环境 python ...

  2. Flask关于request一些方法和属性的整理(持续更新)

    前提:基于纯后端服务, post 请求 (Content-Type: application/json,) 1.获取未经处理过的原始数据而不管内容类型,如果数据格式是json的,则取得的是json字符 ...

  3. Flask学习 4 http方法

    服务端端 #!/usr/bin/env python # encoding: utf-8 """ @version: v1.0 @author: cxa @file: f ...

  4. 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 Jinja 中常用的过滤器 default float int len ...

  5. Flask—路由的注册方法

    第一种注册方法 from flask import Flask app = Flask(__name__) @app.route("/hello") # 第一种注册方法 def h ...

  6. Flask(3)- Flask 中的 HTTP 方法

    查看 app.route() 源代码 def route(self, rule: str, **options: t.Any) -> t.Callable: """ ...

  7. flask自定义处理错误方法

    自定义错误处理方法: 当客户端访问浏览器是,得到相对应的状态码,服务器通过状态码给用户相对应的页面. @app.errorhandler(404) def handle_404_error(err): ...

  8. 在pycharm_2018.2版本中开启Flask的debug的方法 (不要用命令:python **.py启动)

    断点后,先ctl+c关闭控制台程序,再点击debuger调试 问题描述:在pycharm_2018.2版本中,我明确开启了debug,代码如下所示: from flask import Flask a ...

  9. flask中邮件发送方法

    from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) #配置邮件:服务器/端口/传输层安 ...

  10. No module named flask.ext.script 解决方法

    把 .ext. 换成 _ 就OK了 from flask.ext.script import Manager from flask_script import Manager

随机推荐

  1. java拦截器获取请求完整参数

    public class OptLogAspect implements HandlerInterceptor { @Override public boolean preHandle(HttpSer ...

  2. LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)

    题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 ...

  3. LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)

    题目描述 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 解题思路 二叉树转化为链表的基本 ...

  4. phpmyadmin 导入sql报错(sql为phpstudy内置数据库导出来)

    解决方法 1.打开sql,把头部注释去掉

  5. android data binding jetpack II 动态数据更新

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  6. When Database Sharding is Appropriate DATABASE SHARDING

    w横切 http://www.agildata.com/database-sharding/ When Database Sharding is Appropriate Database Shardi ...

  7. 数据分析 - numpy 模块

    numpy 概述 ▨  Numerical Python. 补充了python所欠缺的数值计算能力 ▨  Numpy是其他数据分析及机器学习库的底层库 ▨  Numpy完全标准C语言实现,运行效率充分 ...

  8. Ceph 分布式存储架构解析与工作原理

    目录 文章目录 目录 Ceph 简介 Ceph 的架构:分布式服务进程 Ceph Monitor(MON) Ceph Object Storage Device Daemon(OSD) Ceph Me ...

  9. easy dragging script

    下面的ahk脚本提供了windows下alt dragging的能力: ; Easy Window Dragging -- KDE style (requires XP/2k/NT) -- by Jo ...

  10. 【学习笔记】python3中yaml文件使用

    1.yaml -> 字典:用yaml.load()或yaml.safe_load(YAML字符串或文件句柄),如yaml中有中文,可以使用.encode('utf-8')或打开文件时指定enco ...