Flask 数据库迁移详情

目录
  • 1、使用 Flask-Migrate 实现数据库迁移
  • 2、Flask-Migrate的使用
    • 2.1 数据库的迁移过程
      • 2.1.1 创建迁移环境
      • 2.1.2 生成迁移脚本
      • 2.1.3 更新数据库
  • 3、总结

1、使用 Flask-Migrate 实现数据库迁移

db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现了数据库迁移的概念。

在开发过程中,随着需求的变化,有可能需要添加或修改表的一些字段,但是原表中的数据不能删除,此时就需要创建新表,并将旧表中的数据迁移至新表中,Flask-Migrate这个扩展就可以在不破坏数据的情况下更新数据库表的结构,并完成数据从旧表到新表的迁移。

2、Flask-Migrate的使用

可以使用pip install flask-migrate进行安装。在程序中,我们实例化 Flask_Migrate 提供的 Migrate 类,进行初始化操作。

from flask_migrate import Migrate

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

···

db = SQLAlchemy(app)

migrate = Migrate(app, db)

实例化 Migrate 类,需要传入 Flask 实例 app SQLAlchemy创建的实例 db。

2.1 数据库的迁移过程

先定义 User 模型类。

class User(db.Model):

    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)

    user_name = db.Column(db.String)

    password = db.Column(db.String)

2.1.1 创建迁移环境

在开始迁移数据之前,需要先使用下面的命令创建一个迁移环境:

flask db init

迁移环境只需创建一次,创建后会在项目根目录下生成一个 migrations 目录,其中包含了自动生成的配置文件和迁移版本目录。

2.1.2 生成迁移脚本

使用如下命令自动生成迁移脚本:

flask db migrate -m "create_table"

-m 选项添加备注信息,执行后迁移版本目录生成了迁移脚本。

迁移脚本内有两个函数:

  • upgrade():把迁移中的改动应用到数据库中
  • downgrade():将改动撤销

自动生成的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()downgrade()函数的内容,不一定完全正确,有必要再进行检查一下。

2.1.3 更新数据库

生成了迁移脚本后,使用flask db upgrade命令可完成对数据库的更新。执行后即可生成数据库及表。

如果之后我们需要改动 user 表中的字段,比如添加一个mobile字段,我们只需在 User 模型类中添加该属性,之后执行flask db migrate -m '注释'和flask db upgrade命令即可。

class User(db.Model):

    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)

    user_name = db.Column(db.String)

    password = db.Column(db.String)

    mobile = db.Column(db.String)

如果想要回滚迁移的话,可以执行flask db downgrade命令。

3、总结

这里只是介绍如何在 Flask 中进行数据库迁移,关于在生产环境下,是否需要使用迁移工具或者使用何种工具进行迁移,这里不做讨论,至于我的话,在生产环境中,我没有使用过Flask-Migrate,而是选择编写 SQL 脚本来处理数据库及表的更新或改动,我觉得这样更不容易出错,其实各有各的好处,看自己选择。

到此这篇关于 Flask 数据库迁移详情的文章就介绍到这了,更多相关 Flask 数据库迁移内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Flask-蓝图 blueprint详情

    目录 1.蓝图的定义 1.1使用蓝图 前言: 我们的应用经常会有很多小模块,比如用户模块.后台管理模块等,虽然这些模块都在同一个应用中,但是功能大不相同,把他们放在同一个文件中,显得十分杂乱,不便于管理维护,那么有没有什么方法可以将模块分开管理呢?是有的!Flask 蓝图(Blueprint),它可以模块化管理路由,使用蓝图可以把不同模块的视图函数写在不同的py文件中,在主视图中导入分路由视图的模块,并注册蓝图对象,降低各个功能模块的耦合度使程序结构更加简单.清晰. Flask使用Bluepri

  • 关于Flask 视图介绍

    目录 2.类视图 2.1 标准类视图 2.1.1 基于方法的视图 1.视图函数 之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数. @app.route('/user/<name>') def hello_user(name): return 'Hello {}!'.format(name) 上面的hello_user()函数就是一个简单的视图函数. 当然我们也可以不使用ap

  • Flask 使用工厂模式

    目录 1.工厂模式 2.使用工厂方法创建 app 对象 1.工厂模式 在面向对象编程中,工厂模式是开发过程中最常用的设计模式之一,属于创建型模式,就是通过一个接口函数或对象来创建其他对象并返回,该模式下不会对外暴露创建对象的具体逻辑,使用的接口函数也被叫做工厂函数.工厂模式可以使一个类的例化推迟到子类中进行,也就是说工厂模式可以推迟到在程序运行的时候才动态决定要实例化哪个类,而不是在编译时就必须进行实例化. 2.使用工厂方法创建 app 对象 我们之前是用app=Flask(__name__)创

  • 关于Flask 上下文详细介绍

    目录 1.上下文概念 2.Flask中的上下文 2.1请求上下文 2.2应用上下文 1.上下文概念 上下文,说白了就是所谓的语境,就是语言环境.比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解. 我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象.在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等. 2.Flask中的上下文 Flask 中有两种上下文,应用上下文(appli

  • Flask  请求钩子的实现

    在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理. Flask 常用请求钩子如下: before_first_request:在处理第一个请求之前运行 before_request:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行 after_request:如果没有未处理的异常抛出,在每次请求结束

  • Flask框架工厂函数用法实例分析

    本文实例讲述了Flask框架工厂函数用法.分享给大家供大家参考,具体如下: 在我们开始学习FLask的时候,创建应用的实例是用app=Flask(name)来做的,但是当我们想创建多个不同配置的实例的时候咋办呢,每次都要改是不是很烦,那为了减少麻烦,我们可以采用调用一个create_app函数来返回应用实例的方法,这就是工厂方法的大概意思啦! 文字说的再多也难以帮助理解,看代码示例: 1.最初的写法 #__init__.py里面创建实例,应用实例对象创建完再引入视图函数的模块,因为这时候视图函数

  • Flask 使用类组织配置详情

    在实际的项目中,我们一般都会建立三个环境:开发.测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创建不同的配置文件,但是最方便的做法是在单个配置文件中使用 Python 类来组织多个不同类别的配置. 例如下面是一个应用的配置文件 settings.py,它包含一个基本配置类 BaseConfig, 还有其他特定的配置类: 开发配置类 DevelopConfig 测试配置类 TestCofig 生产配置类 ProductConfig 这些特定配置类都继承自

  • Flask 数据库集成的介绍

    目录 1.使用Flask-SQLAlchemy管理数据库 1.1 配置Flask_SQLAlchemy 1.2 定义数据库模型 1.3 创建数据库和表 1.4 数据库操作 1.4.1 Create 1.4.2 Read 1.4.3 Update 1.4.4 Delete 1.4.5 在视图函数里操作数据库 前言: 数据库是大多数 Web 应用的基础设施,只要想把数据存储下来,就离不开数据库,下面将一起学习一下如何给 Flask 应用添加数据库支持. 1.使用Flask-SQLAlchemy管理数

  • Flask 入门系列 Cookie与session的介绍

    目录 一.Cookie的使用 1.什么是Cookie 2.在Flask中使用Cookie 二.session的使用 1.什么是session 2.Flask中的session对象 3.在Flask中使用session 一.Cookie的使用 1.什么是Cookie 我们都知道,HTTP 协议是无状态的,也就是说,在一次请求响应结束后,服务端不会保留任何对方状态的信息,对于某些需要保留的信息,可以通过 Cookie 技术来完成,通过在请求和响应报文中添加 Cookie 数据来保存客户端的状态信息.

  • Flask 数据库迁移详情

    目录 1.使用 Flask-Migrate 实现数据库迁移 2.Flask-Migrate的使用 2.1 数据库的迁移过程 2.1.1 创建迁移环境 2.1.2 生成迁移脚本 2.1.3 更新数据库 3.总结 1.使用 Flask-Migrate 实现数据库迁移 db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现

  • Flask 数据库迁移详情

    目录 1.使用 Flask-Migrate 实现数据库迁移 2.Flask-Migrate的使用 2.1 数据库的迁移过程 2.1.1 创建迁移环境 2.1.2 生成迁移脚本 2.1.3 更新数据库 3.总结 1.使用 Flask-Migrate 实现数据库迁移 db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现

  • Flask数据库迁移简单介绍

    前言 用过Django的小伙伴都知道,Django的ORM是自带的,比较特殊,而且集成了很多功能,比如数据库迁移- 何为ORM,个人之见解,简化sql语句的书写,将关系型数据库的一张张表转化为了python的类,最大的好处是简化了学习成本,不会sql语句的程序员也能平滑的使用数据库,并且天生防sql注入.flask可以使用SQLAlchemy,包名为flask-sqlalchemy.至于具体用法翻译的官方文档讲的也足够清楚.大家直接谷歌跟着文档就能搞定,本篇主要讲如何进行数据库迁移. flask

  • sql server2008数据库迁移的两种方法

    sql server2008数据库迁移的两种方法,具体内容如下 方案一 1.先将源服务器上的数据库文件打包(包括mdf和ldf文件),并且复制到目标服务器上. 2.解压,然后在目标服务器上附加数据库 总结:适合数据库巨大(50GB以上),需要快速迁移数据,并且移动硬盘空间足够大. 方案二:先备份后还原 1.备份 数据库对象右键\任务\备份 注意,如果数据库文件较大的话,最好选择'压缩备份' 2.还原 将备份文件copy到目标服务器上,然后还原数据库. 总结:适合数据库中小型(否则备份的时间比较长

  • asp.net mvc CodeFirst模式数据库迁移步骤详解

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ? 哈哈 利用数据库迁移,将原有结构不改动,将新建类进行单独建表操作,或者是已有数据库表,改变字段,那就修改表. 迁移步骤: 1.打开程序包管理器控制台:工具->NuGet包管理器->程序包管理器控制台.(当然还有其它方式也可以打开,我比较喜欢这种) 点击后将弹出程序包管理器控制台 极其要注意的是默认项目!!! 2.启动

  • oracle数据库迁移到MySQL的方法总结

    前言 之前搭建了一个ExtJS + spring + Oracle 的这样一个报表系统的框架. 因为其他部门的要求, 也需要这个Framework 进行一些特殊的定制. 但是有一个问题是 Oracle 的数据库是需要收费的, 个人使用倒没什么问题, 公司使用的话就会有侵权的问题了. 而MySQL 则是完全免费的. 所以使用 ExtJS + Spring + MySQL  这样的组合应该就没什么问题了. 理论上来说, MySQL 已经被Oracle 收购, 这两者之间的Migrate 应该比较容易

  • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)

    ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 打开ACCESS2007的数据库工具 方法一:使用ACCESS2007自带的数据库迁移工具 1.打开ACCESS2007的数据库迁移向导 2.点击SQLSERVER按钮,弹出升迁向导对话框 3.选择新建数据库 4.输入计算机名,我的本地计算机名字叫joe,因为SQLSERVER安装在本地,所以选择使用可信连接就可以了 数据库名称默认就可以了 5.选择所有表,移动到右边框 6.把表索引也一起升迁到SQLSE

  • yii2.0数据库迁移教程【多个数据库同时同步数据】

    本文讲述了yii2.0数据库迁移的方法.分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: yii migrate/create <name> 必填参数 name 的作用是对新的迁移做一个简要的描述.例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:因为 na

  • Laravel 5框架学习之数据库迁移(Migrations)

    database migrations 是laravel最强大的功能之一.数据库迁移可以理解为数据库的版本控制器. 在 database/migrations 目录中包含两个迁移文件,一个建立用户表,一个用于用户密码重置. 在迁移文件中,up 方法用于创建数据表,down方法用于回滚,也就是删除数据表. 执行数据库迁移 复制代码 代码如下: php artisan migrate #输出 Migration table created successfully. Migrated: 2014_1

  • mysql 通过拷贝数据文件的方式进行数据库迁移实例

    mysql通过拷贝数据文件的方式进行数据库迁移 --环境windows 将源机器A数据库拷贝到目标机器B: 我先在目标机器B上安装MySQL,停止mysql服务,然后将源机器A的data下关于数据库的文件和ibdata1拷贝过去,其余不用拷贝.如图: 源机器A: 启动目标数据库服务net start mysql,即可查看到导过来的所有数据库了. 注意:ibdata1一定不要忘记拷贝,且要拷贝到准确的位置(如我目标机器的ibdata1在E:\MySQL Datafiles,不在data路径下,我就

随机推荐