flask中数据库迁移
数据库迁移
- 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
- 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
- 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
- 为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。
首先要在虚拟环境中安装Flask-Migrate。
pip install flask-migrate
- 代码文件内容:
#coding=utf-8
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Managerapp = Flask(__name__)
manager = Manager(app)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db) #manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)#定义模型
#书籍表
class BookInfo(db.Model):#设置表名__tablename__ = 'bookinfo'#设置为主键之后,自动自增长id = db.Column(db.Integer,primary_key=True)name = db.Column(db.String(20),unique=True,nullable=False)pub_date = db.Column(db.Date,nullable=True)readcount = db.Column(db.Integer,default=1)commentcount = db.Column(db.Integer,default=1)is_delete = db.Column(db.Boolean,default=False)peopleinfo_set = db.relationship('PeopleInfo',backref='book',lazy='dynamic')def __repr__(self):return self.name
#人物表
class PeopleInfo(db.Model):__tablename__ = 'peopleinfo'id = db.Column(db.Integer,primary_key=True)name = db.Column(db.String(20),unique=True)password = db.Column(db.String(20),nullable=False)email = db.Column(db.String(50),nullable=True)#设置外键book_id = db.Column(db.Integer,db.ForeignKey('bookinfo.id'))def __repr__(self):return self.nameif __name__ == '__main__':manager.run()
创建迁移仓库
#这个命令会创建migrations文件夹,所有迁移文件都放在里面。
python database.py db init
创建迁移脚本
- 自动创建迁移脚本有两个函数
- upgrade():函数把迁移中的改动应用到数据库中。
- downgrade():函数则将改动删除。
- 自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容。
- 对比不一定完全正确,有可能会遗漏一些细节,需要进行检查
python database.py db migrate -m 'initial migration'
更新数据库
python database.py db upgrade
返回以前的版本
可以根据history命令找到版本号,然后传给downgrade命令:
python app.py db history输出格式:<base> -> 版本号 (head), initial migration
- 回滚到指定版本
python app.py db downgrade 版本号
实际操作顺序:
- 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) 版本号
flask中数据库迁移相关推荐
- Flask框架(flask-script扩展命令行和flask中数据库migrate扩展的使用)
flask-script扩展命令行 1. 安装 : pip install Flask-Script 2. 在程序中 from flask_script import Manager '' ...
- Flask--02(flask中数据库相关+书籍管理案例)
一.数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了 ...
- Flask中数据库基本操作,十分钟就掌握了
在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用 db.session 表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提 ...
- Flask中数据库的应用
一.配置SQLAlchemy 1.安装包 pip install flask-sqlalchemy pip install pymysql 2.配置数据库 a)配置SQLALCHEMY_DATABAS ...
- flask中数据库的基本操作-增删改查【备忘】
1.增加数据(就相当于增加一个实例对象) user1 = User(name='long',email='1006550026@qq.com',password='123456',role_id= ...
- laravel 框架中使用数据库迁移添加注释
laravel 框架中数据库迁移添加注释 在使用laravel框架过程中,估计很多人都有用过数据库迁移文件.可能大家都会在建表时为字段添加注释.我在此要说明的是为表添加注释 首先我们需要引入larav ...
- Flask 中的数据库迁移
Flask 中的数据库迁移 在我之前使用 Flask 实现简单接口时,为了方便,我每次都会将数据表删除掉,然后重新创建表和添加数据.因为测试数据只有几条,所以可以使用删表重建的方式,但在实际的项目中, ...
- 简单分析Flask 数据库迁移详情
本文给大家分享的是 Flask 数据库迁移详情,db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all() ...
- flask数据库迁移理解及命令
前言: 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表.就是将关系型数据库的一张张表转化成了Python的一个个类. 在开发中经常会遇到需要修改原来的数据库模型,修改之后更新数据库, ...
最新文章
- 3D视觉检测的未来:光度立体技术
- NOIP2017 小凯的疑惑
- 从LabVIEW到C++
- 【Android】换肤技术讲解
- linux gcc出错,编译arm-linux-gcc出错
- ASP如何限定中英文混合的文字输出字数?
- html表白照片墙,【原创】【申精】用python去告白 绘制照片墙(自定义格式)
- 开放Nginx在文件夹列表功能
- Telnet 服务器软件的安装
- 安装CentOS 7.4 操作系统
- 计算机提示资源管理器停止,windows资源管理器已停止工作,教您提示win资源管理器已停止工作...
- SICP练习1.16
- sybase 快速删除大数据库的手顺方法
- C#--解方程组之Jacobi迭代法
- 【Unity Shader】关于Stencil的理解小记
- Redis-5.0.5集群配置
- QQ登录提示:登录超时,请检查您的网络或者本机防火墙设置(错误码:0x00000001)
- linux命令lha用法详解
- 草图大师怎么渲染全景图?Sketchup渲染全景图的操作办法和方式!
- Android 接入华为通知栏推送教程(特此整理)
热门文章
- zabbix 启动报cannot connect to Service Manager: [0x00000005]解决方法
- 配置远程服务器的别名
- StringBuffer 和 StringBuilder 的 3 个区别
- 使用框架注意事项:vue-react
- 七、Framework类库
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
- 让你变成优秀程序员的几个小习惯
- 修改 Mac 版 Safari、Chrome、FireFox、Opera 的 User-Agent
- 谷歌帮助开发人员面向教育应用
- Macbook pro wifi连接无线路由不稳定掉线的解决办法