【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.rhkb.cn/news/284190.html

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

相关文章

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域 一、什么是网站大屏设计二、网站大屏设计原型素材三、网站大屏设计设计素材四、他山之石 一、什么是网站大屏设计 网站大屏设计是网站设计中至关重要的一部分,因…

Webman全局异常捕获处理

最近在使用webman这个框架做项目开发,涉及到需要统一处理异常捕获。由于官网给的并不详细,于是自己实现了一下全局异常处理类。 一、配置效果 例如:我要在项目中统一返回json 格式数据,并不想在业务层写try,catch逻辑。 或者在业务…

查看文件内容的指令:cat,tac,nl,more,less,head,tail,写入文件:echo

目录 cat 介绍 输入重定向 选项 -b -n -s tac 介绍 输入重定向 nl 介绍 示例 more 介绍 选项 less 介绍 搜索文本 选项 head 介绍 示例 选项 -n tail 介绍 示例 选项 echo 介绍 输出重定向 追加重定向 cat 介绍 将标准输入(键盘输入)的内容打…

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库,开发于二十多年前。它提供了一个低级API,允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时,它是首选平台。它可以在…

SQLiteC/C++接口详细介绍sqlite3_stmt类(五)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(四) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(六) 12. sqlite3_bind_text16函数 sqlite3_bind_text16函数用…

深入理解MySQL中的JOIN算法

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 一、引言二、嵌套循环连接(Nested-Loop Join)2.1 工作原理2.2 性能考虑2.3 优化策略 三、块嵌套循环…

Maven初级

文章目录 学习目标一、maven概述1.1、项目开发中的问题1.2、maven是什么1.2.1 maven定义1.2.2 mven的作用 二、maven快速入门2.1、maven的下载与安装2.2、maven安装目录简介2.3、maven配置-MAVEN_HOME2.3.1 配置JAVA_HOME2.3.2配置MAVEN_HOME 2.4、maven仓库介绍2.4.1、maven本…

【C语言进阶篇】动态内存管理

【C语言进阶篇】动态内存管理 🌈个人主页:开敲 🔥所属专栏:C语言 🌼文章目录🌼 1. 为什么要有动态内存分配 2.动态内存开辟和释放函数 2.1 动态内存释放函数 2.1.1 free函数 2.2 动态内存开辟函数 2.2.1 …

C/C++之内存旋律:星辰大海的指挥家

个人主页:日刷百题 系列专栏:〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 一、C/C内存分布 我们先来了解一下C/C内存分配的几个区域,以下面的代码为例来看…

mac 安装 nvm 【真解决问题】

前提 没有node环境已有git 下载 我用的gitee极速下载 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags配置 1. 配置变量 在用户的目录下新增文件 .zshrc export NVM_DIR"$HOME/…

ctfshow-web入门-反序列化

web254 先看题 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); highlight_file(__FIL…

vue 修改element-plus主题色

一、安装SCSS npm install sass --save-dev npm install sass-loader --save-dev npm install node-sass --save-dev npm install vue-style-loader --sava-dev 二、添加主题文件theme.scss forward "element-plus/theme-chalk/src/common/var.scss" with ($col…

基于springboot+vue的宠物商城网站

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

RabbitMq高可用

消息队列高级 服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.2.消息持久化1.3.消费者消息确认1.4.消费失败重试机制1.5.总结 2.死信交换机2.1.初识死信交换机2.2.TTL2.3.延迟队列 3.惰性队列3.1.消息堆积问题3.2.惰性队列 4.MQ集群4.1.集群分类4.2.普通集群4.3.镜像集群…

【Swagger】接口文档生成

文章目录 一、前后端分离开发流程二、YApi导入接口文档三、Swagger3.1 介绍3.2 使用步骤3.2.1 导入 knife4j 的maven依赖3.2.2 在配置类中加入 knife4j 相关配置3.2.3 配置类中设置静态资源映射3.2.4 访问测试 3.3 常用注解3.4 全局参数设置 四、YApi 与 Swagger 一、前后端分离…

AGV|机器人导航识别二维码视觉传感器TDCS-0100与上位机PLC联机实例说明

目前二维码视觉导航的AGV出货量非常大&#xff0c;几乎都是仓储型AGV使用的导航方式。在地面或者天花板等位置标贴二维码作为标记点&#xff0c;通过扫描读取二维码信息和二维码相对相机的角度来确定当前位置。 本文重点介绍AGV|机器人导航识别二维码视觉传感器TDCS-0100与上位…

查看文件信息:ls,pwd,操作文件:cd,touch,mkdir,rmdir,rm,cp,mv

目录 ls 选项 -l -a 隐藏文件存在的意义 -F -d -R pwd cd 选项 ​编辑 touch 选项 mkdir 选项 -p rmdir 选项 -p rm 选项 cp 选项 -r -R (和-r的区别) mv 移动目录 改名 选项 rm改为mv ls 显示当前目录下的文件 选项 (可以合并使用,有的也可以写…

亚马逊云科技《生成式 AI 精英速成计划》

最近亚马逊云科技推出了「生成式AI精英速成计划」&#xff0c;获取包含&#xff1a;免费学习热门生成式AI课程、技能证书、人力主管的面试辅导、云计算国际认证、免费去往北美参加全球用户大会等&#xff5e; 针对开发者和企业非技术专业人士&#xff0c;了解如何使用大模型平台…

测试平台——前端框架

一、创建vue项目 npm init vitelatest web_class wylWYLdeMacBook-Air testplatform % npm init vitelatest web_class ✔ Select a framework: › Vue ✔ Select a variant: › JavaScriptScaffolding project in /Users/wyl/workspace/testplatform/web_class...Done. Now…

软考高级:CS 和 BS 架构

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…