内容简介:在Django框架开发过程中,我们对数据库字段添加或删除,直接修改模型类,然后进行迁移可以了,非常方便。我们也想让Flask框架支持这样的操作,就需要使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。 先安装下面两个扩展:首先我们通过命令创建出migrations文件夹,后面所有的迁移文件都会放
在Django框架开发过程中,我们对数据库字段添加或删除,直接修改模型类,然后进行迁移可以了,非常方便。我们也想让Flask框架支持这样的操作,就需要使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
二、安装
为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。 先安装下面两个扩展:
pip install Flask-Script 复制代码
pip install flask-migrate 复制代码
三、配置
from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql from flask_migrate import Migrate, MigrateCommand from flask_script import Manager pymysql.install_as_MySQLdb() app = Flask(__name__) # 通过脚本管理flask程序 manager = Manager(app) # 设置连接数据库的URL app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/db_flask' # 设置每次请求结束后会自动提交数据库中的改动 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True # 数据库和模型类同步修改 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 查询时会显示原始 SQL 语句 app.config['SQLALCHEMY_ECHO'] = True db = SQLAlchemy(app) # 创建数据库迁移对象 Migrate(app, db) # 向脚步管理添加数据库迁移命令 db指命令的别名 manager.add_command('db', MigrateCommand) # 类型 class Type(db.Model): # 表名 __tablename__ = 'tbl_types' # 数据库真正存在的字段 id = db.Column(db.Integer, primary_key=True) # 主键 name = db.Column(db.String(32), unique=True) # 名字 # 数据库中不存在的字段,只是为了查找和反向查找。 # backref:在关系的另一模型中添加反向引用 heros = db.relationship("Hero", backref='type') def __repr__(self): return self.name # 英雄 class Hero(db.Model): # 表名 __tablename__ = 'tbl_heros' # 数据库真正存在的字段 id = db.Column(db.Integer, primary_key=True) # 主键 name = db.Column(db.String(64), unique=True) # 名字 gender = db.Column(db.String(64)) # 性别 # 外键 一个射手对应很多英雄 type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id")) def __repr__(self): return self.name if __name__ == '__main__': # 0.0.0.0代表任何能代表这台机器的地址都可以访问 # app.run(host='0.0.0.0', port=5000) # 运行程序 manager.run() 复制代码
四、添加字段
首先我们通过命令创建出migrations文件夹,后面所有的迁移文件都会放在这个文件夹里面
python flask_migrate_db.py db init 复制代码
如图所示:
- 生成迁移文件
下面这条命令跟我们Django里面的makemigrations一样,是生成迁移文件的作用。因为我们的模型类并没有添加或删除字段,所有第一次会出现没有改变的提示。 -m:给迁移文件加上注释
python flask_migrate_db.py db migrate -m 'first create' 复制代码
提示:
INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.env] No changes in schema detected. 复制代码
- 添加新字段 我们在英雄里面添加一个年龄字段,再迁移一下:
age = db.Column(db.Integer) # 年龄 复制代码
迁移
python flask_migrate_db.py db migrate -m 'add age' 复制代码
迁移文件会生成到migrations文件夹中如图:
生成迁移文件,这个时候数据库并没有改变,我们还要用upgrade命令同步到数据库中:
python flask_migrate_db.py db upgrade 复制代码
我们在本地数据库查看一下表结构:
age字段已经添加到数据库当中了。
五、回退
回退数据库时,需要指定回退版本号,由于版本号是随机字符串,为避免出错,建议先使用python flask_migrate_db.py db history命令查看历史版本的具体版本号,然后复制具体版本号执行回退。
里面base指的是原始版本。例如我们发现我们刚才添加的字段并没有什么作用,我们就可以回退到原始版本。
python flask_migrate_db.py db downgrade base 复制代码
我们在本地数据库查看一下表结构:
后面如果有很多版本,直接指定版本号就可以。例如:
python flask_migrate_db.py db downgrade 4cee71e47df3 复制代码
在Flask中有了对象模型类迁移的扩展,维护起来表结构,方便了很多。
欢迎关注我的公众号:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 圣思园《精通Spring Boot/Cloud》与《精通Java并发》课程现已宣布
- Charles 从入门到精通
- MAT 入门到精通(一)
- Git 从入门到精通
- Webpack入门到精通(1)
- 爬虫入门到精通-网页的下载
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
B端产品经理必修课
李宽 / 电子工业出版社 / 2018-9 / 59
《B端产品经理必修课:从业务逻辑到产品构建全攻略》主要讲述了“单个产品管理流程”,以展示B 端产品经理的工作方法及B 端产品的设计方法。《B端产品经理必修课:从业务逻辑到产品构建全攻略》分为三个部分。第一部分主要讲述的是B 端产品经理的工作流程和定义(即单个产品管理流程),以及从事B 端产品经理的职业现状和规划,还包括设计B 端产品时需要了解的指导思想。第二部分是通过各个章节来讲述单个产品管理流程......一起来看看 《B端产品经理必修课》 这本书的介绍吧!