前言:

  • 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表。就是将关系型数据库的一张张表转化成了Python的一个个类。
  • 在开发中经常会遇到需要修改原来的数据库模型,修改之后更新数据库,最简单粗暴的方式就是删除旧表,然后在增加新表,这样做的缺点是会造成数据丢失。
  • 使用数据库迁移,可以追踪数据库模式的变化,然后把变动应用到数据库中。
  • 在flask中使用Flask-Migrate来实现数据库迁移,并且集成到Flask-Script中,所有的操作通过命令来完成。
  • 为了导出数据库迁移命令,Flask-Migrate使用了一个MigrateCommand类,可以附加到Flask-Script的manager对象上。

安装Flask-Migrate

pip install flask-migrate

Python代码,用户类和角色类。

#!/usr/bin/python
#coding:utf-8from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand"""
flask_migrate作用:
1、通过命令的方式创建表
2、修改表的结构
"""

class Config(object):SQLALCHEMY_DATABASE_URI = "mysql://root:@127.0.0.1:3306/book"# 这个值可以设置,也可以不设置,如果不设置,那么会一直报警告SQLALCHEMY_TRACK_MODIFICATIONS = False# 这里有个坑,下次再讲。在lask-sqlalchemy 2.0之后就不在需要设置这一项了。SQLALCHEMY_COMMIT_ON_TEARDOWN = Trueapp = Flask(__name__)
app.config.from_object(Config)db = SQLAlchemy(app)
manager = Manager(app)# 第一个参数是flask实例,第二个参数SQLAlchemy实例
Migrate(app, db)#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command("db", MigrateCommand)class Role(db.Model):__tablename__ = "roles"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(128))title = db.Column(db.String(128))us = db.relationship("User",backref="role")class User(db.Model):__tablename__="users"id = db.Column(db.Integer,primary_key=True)name = db.Column(db.String(128))email = db.Column(db.String(128))password = db.Column(db.String(128))role_id = db.Column(db.Integer,db.ForeignKey("roles.id"))@app.route("/")
def index():return "index"if __name__ == '__main__':manager.run()

关于config的配置,可以参考flask-Script中文文档

迁移数据库三步走:

第一步:创建迁移仓库

python database.py db init

这里的db是迁移命令的对象,名字可以随便取,但是需要保持一致。

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

这里只是创建了迁移仓库,表还没创建。

可以看到表还没有创建。

第二步:创建迁移脚本

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

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

在windows下这里也存在一个坑。

这个坑在这里解释下:

windows系统不支持cmd接收的参数中含有空格,例如我们上面'initial migration',系统收到的是两个参数,所以报错会显示参数过多。

我的解决办法是在两个单词之间加上“_”连接当然方法很多,我这里就使用这种简单粗暴的。

这种情况下,注释会报错。

这样则不会。

运行命令之后,只是在migrations文件夹中新增了数据库迁移的版本文件并没有在数据库也只是创建了版本号,并没有生成对应的表。

第三步:更新数据库

更新数据库命令:

python migrate.py db upgrade

可以看到已经创建表成功了。

如果我们需要讲roles表中的title字段删除,我们再看下版本文件的变化。

删除前:

删除后:

将代码中的title删除,然后再次执行迁移脚本命令

python migrate.py db migrate -m 'del_title'

这个时候数据库中title字段还没有被删除

执行更新数据库操作:

可以看到数据库中,数据被删除。

python migrate.py db upgrade

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

先写这么多,发现写起来,真的有很多内容可以写。待续。。。

转载于:https://www.cnblogs.com/itpython/p/10440786.html

flask数据库迁移理解及命令相关推荐

  1. 简单分析Flask 数据库迁移详情

    本文给大家分享的是 Flask 数据库迁移详情,db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all() ...

  2. flask数据库迁移

    定义模型类 # coding:utf-8from flask import Flask, render_template, request, jsonify, redirect, url_forfro ...

  3. 【Python】Flask框架系列(四):Flask-Migrate数据库迁移

    参考:flask数据库迁移理解及命令 Flask-Migrate 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表.就是将关系型数据库的一张张表转化成了Python的一个个类. 在开发 ...

  4. Flask 中的数据库迁移

    Flask 中的数据库迁移 在我之前使用 Flask 实现简单接口时,为了方便,我每次都会将数据表删除掉,然后重新创建表和添加数据.因为测试数据只有几条,所以可以使用删表重建的方式,但在实际的项目中, ...

  5. Oracle数据库迁移

    为什么80%的码农都做不了架构师?>>>    整理项目资料时,看到了几年前数据库迁移时的备忘记录.迁移过程还是比较曲折的,现在想起来心里还有些抵触,这活简直太"脏&quo ...

  6. Asp.Net MVC CodeFirst模式数据库迁移步骤

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了,但是,我有新的类要加入,有字段需要修改,就得将这部分修改同步到数据库中,利用数据库迁移,将 ...

  7. Web框架——Flask系列之数据库迁移(二十)

    一.Flask-Migrate扩展 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模 ...

  8. flask中数据库迁移

    数据库迁移 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用 ...

  9. Flask——migrate实现数据库迁移

    migrate实现数据库迁移的指令如下: 指令 代码 说明 初始化 python 文件名.py db init 这个命令会创建migrations文件夹,所有迁移文件都放在里面 创建迁移脚本 pyth ...

最新文章

  1. 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?
  2. 分享--关于学习的一些事儿
  3. 赛门铁克公布Q3财报 亏损68亿美元
  4. paper reference
  5. 学生管理系统java mysql_学生信息管理系统 基于Java+mysql开发的学生管理系统 - 下载 - 搜珍网...
  6. 2.用Python套用Excel模板,一键完成原亮样式
  7. linux 命令如何输入,Linux 命令行输入
  8. QT5开发及实例学习之二信号和槽机制
  9. 微软正在开发基于 Rust 的安全编程语言
  10. 【Java】【Fulme】Flume-NG源代码阅读之SpoolDirectorySource
  11. php中字符串分割函数是,php分割字符串的函数是什么
  12. 【路由协议】和【应用协议】
  13. android 6g 有必要吗,手机6g运存有必要吗
  14. 《数学之美》第一章读后感
  15. mongoDB Ops Manager
  16. 生产管理ERP软件系统的主要功能有哪些?
  17. JFinal配置说明
  18. 张勋说:耐磨钢球简介
  19. C++无符号数比较大小
  20. UltraEdit-32 v13.10+4 官方中文版

热门文章

  1. 数据库建模模板、菜单显示出问题解决方案
  2. 告别苦逼的程序员生涯,我的CTO之路!
  3. 我的RHCA之路随想
  4. 恢复后缀phobos勒索病毒 解密成功 百分百恢复sql文件
  5. Mysql入门实战中
  6. STM32中IO口的8中工作模式
  7. [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
  8. 20160522--20160526----mybatis入门基础
  9. 设置winfrom窗体透明度,拖动,任务栏中显示窗体
  10. golang-china