【Flask】Flask数据迁移操作

Flask数据迁移操作

前提条件

安装第三方包:

# ORM
pip install flask-sqlalchemy
# 数据迁移
pip install flask-migrate
# MySQL驱动
pip install pymysql
# 安装失败,指定如下镜像源即可
# pip install flask-sqlalchemy https://pypi.tuna.tsinghua.edu.cn/simple/
# pip install flask-migrate -i https://pypi.tuna.tsinghua.edu.cn/simple/
# pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple/

配置数据库:

# 这里先使用sqlite数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

迁移操作

创建迁移文件夹:

flask db init       # 创建迁移文件夹migrates,只调用一次

这一步可能会出现如下的错误,这是因为 Flask 没有找到我们创建的 app

执行如下步骤:

# windows环境设置FLASK_APP
$env:FLASK_APP="run.py"
flask db init

执行后,在项目目录下生成了 migrations 目录。

生成迁移文件

flask db migrate

执行这一步,有如下报错产生:

跟踪代码,发现其中一个地方 current_app.extensions['migrate'].db.get_engine() 但是这的 current_app.extensions['migrate'].dbNone,因此产生了报错。

stackoverflow 有一个相同的报错:python 3.x - Flask migration fails - Stack Overflow,这里是没有给 migrate.init_app() 传入 db 参数,检查后,项目中确实少传了参数,修改项目代码为如下:

__init__.py 中写入数据迁移的相关操作。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
​
app = Flask(__name__)
# 配置数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
​
db = SQLAlchemy()
migrate = Migrate()
# 这里需要导入要初始化的模型文件,否则可能无法生成迁移文件
from market.models import Item
# 初始化插件
db.init_app(app)
migrate.init_app(app, db)

修改后,再次执行迁移文件的操作,在 migrations\version 下生成了迁移文件。

执行迁移文件的升级操作:

flask db upgrade

打开数据库工具,数据库已经迁移成功。

执行数据库降级操作,撤销该次的升级操作。

flask db downgrade

打开数据库,本次迁移创建的数据表已撤销。

总结

  1. 数据库的模型迁移操作涉及的基本包有:

    # ORM
    pip install flask-sqlalchemy
    # 数据迁移
    pip install flask-migrate

  2. 数据库的模型迁移需要创建的代码有:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    ​
    app = Flask(__name__)
    # 配置数据库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    ​
    db = SQLAlchemy()
    migrate = Migrate()
    # 这里需要导入要初始化的模型文件,否则可能无法生成迁移文件
    from market.models import Item
    # 初始化插件
    db.init_app(app)
    migrate.init_app(app, db)

  3. 数据库模型的迁移操作:

    # 设置FLASK_APP环境变量
    $env:FLASK_APP="run.py"
    # 初始化迁移目录,仅需一次操作
    flask db init
    # 生成迁移文件
    flask db migrate
    # 执行迁移操作
    flask db upgrade
    # 撤回迁移操作
    flask db downgrade

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/562951.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM——运行时数据区

前言 由于JAVA程序是交由JVM执行的,所以我们所说的JAVA内存区域划分也是指的JVM内存区域划分,JAVA程序具体执行的过程如下图所示。首先Java源代码文件会被Java编译器编译为字节码文件,然后由JVM中的类加载器加载各个类的字节码文件&#xff0…

Typecho如何去掉/隐藏index.php

Typecho后台设置永久链接后,会在域名后加上index.php,很多人都接受不了。例如如下网址:https://www.jichun29.cn/index.php/archives/37/,但我们希望最终的形式是这样:https://www.jichun29.cn/archives/37.html。那么…

【数据结构】顺序表习题之移除元素和合并两个有效数组

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 嗨呀,今天的博客是关于顺序表的两道题目,是力扣的移除元素和合并有序数组的题目。 一.移除…

第十四届蓝桥杯大赛软件赛省赛Java大学B组

最近正在备考蓝桥杯,报的java b组,顺便更一下蓝桥的 幸运数字 题目 思路:填空题,暴力即可 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {static int trans(int x, int y){int …

git基础-查看提交历史

查看提交历史 在创建了多个提交之后,或者如果克隆了一个具有现有提交历史的存储库,可能会想要回顾一下发生了什么。最基本和强大的工具就是 git log 命令。 运行下git log查看下输出状态 默认情况下,不带任何参数运行 git log 命令会以逆时…

使用 VMWare 安装 Android-x86 系统(小白版)

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统,每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

区块链技术下的新篇章:DAPP与消费增值的深度融合

随着区块链技术的持续演进,去中心化应用(DAPP)正逐渐受到人们的瞩目。DAPP,这种在分布式网络上运行的应用,以其去中心化、安全可靠、透明公开的特性,为用户提供了更为便捷和安全的消费体验。近年来&#xf…

Linux 常用命令 1

Tips:终端热键ctrl shift 放大终端窗口的字体 ctrl - 缩小终端窗口的字体 注意区分大小写 查阅命令帮助信息: 1)--help command –help(两个减号) 显示command命令的帮助信息 2)man man command 查阅command命令的使…

PAT题解 --- 寻宝图

今天是PTA题库解法讲解的第十天,今天我们要讲解浪漫侧影,题目如下: 题解思路: 要解决这个问题,可以使用深度优先搜索(DFS)方法来遍历每一个陆地或宝藏格子,标记所有与之相连的格子…

MySQL表内容的增删查改

在前面几章的内容中我们学习了数据库的增删查改,表的增删查改,这一篇我们来学习一下对表中的内容做增删查改。 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.创建Create 我们先创建…

linux centos 安装jenkins,并构建spring boot项目

首先安装jenkins,使用war包安装,比较简单,注意看下载的版本需要的JDK版本,官网下载https://www.jenkins.io/download/ 把下载好的war包放到服务器上,然后运行,注意8080端口的放行 # 前台运行并指定端口 ja…

基于Matlab的眼底图像血管分割,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…