返回顶部
首页 > 资讯 > 后端开发 > Python >pythonFastApi实现数据表迁移流程详解
  • 199
分享到

pythonFastApi实现数据表迁移流程详解

2024-04-02 19:04:59 199人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录啥是数据迁移1.需要新的数据表2.需要对现有表结构进行调整回到ORM迁移手段安装alembic初始化项目修改alembic.ini修改alembic/env.py开始生成迁移工作

啥是数据迁移

在我们平时的开发过程中,经常需要对一些数据进行调整。一般会有以下几种场景:

1.需要新的数据表

我们的接口自动化平台虽然已经较为完善了,但难免会继续迭代一些新的功能,假设我们需要做一个订阅用例的功能。

大体想一下就可以知道,订阅用例以后这个数据得持久化(即入库),这样我在查询谁订阅了这条用例的时候,就能获取到订阅人,订阅时间等数据。

这也就意味着我们需要一张订阅表,里面至少得有订阅人和订阅的id,以及订阅时间这3个要素。体现在数据库通俗点说就需要:

// 创建订阅表, 后面的省略
create table... 

由于业务的变动,导致新的数据表诞生。

2.需要对现有表结构进行调整

当我们的订阅表完成以后,有的同学就发现了,这个订阅好像不能取消,所以我们此时可能需要一个新的字段: isValid,这个字段用来判断用户是否取消订阅了这个用例,如果我订阅错了,或者嫌消息太多,想取消订阅,那还是得满足需求的。

包括新增字段/修改字段/删除字段,这些都会对数据表产生影响,导致我们需要改动数据库。

回到ORM

我们目前采用sqlalchemy作为我们的orm,如果只需要修改python的Model类(操作字段就加在Model类里面操作)该多好。这样的话,我们依然不需要去写很基础的sql语句,就能达到修改表结构的目的。而这个,就是我们今天要讲的数据迁移。因为数据需要发生变化,orm与数据库的逻辑对不上号了,所以我们需要迁移。

迁移手段

目前市面上,关于Django(自带orm)和flask这块都很成熟,djanGo因为有自带的orm显得更牛逼,在manage.py里面自带了migrate(迁移)的命令。

而我们今天要讲的fastapi,由于不像django那么全面,所以我们采用alembic(sqlalchemy作者编写)来帮助我们完成数据迁移操作。

如果你也用的fastapi+sqlalchemy,那我们就一起来耍耍i!

注: sqlalchemy只自带create_all(建立全部表)的功能

安装alembic

大家采用虚拟环境和全局安装都可以,我的建议是全局安装,因为我们可能会在多个项目使用它。

pip install alembic 

初始化项目

我们在Python项目的根目录输入以下命令:

alembic init alembic 

alembic是我们刚才安装的工具,init则是初始化的意思,后面的alembic则是迁移文件夹的名字,一般我们会默认叫alembic,以便于其他人一眼就知道是干嘛的。

修改alembic.ini

执行完成之后你会发现根目录多了个ini配置文件和alembic文件夹,我们需要稍微修改下配置文件:

将alembic.ini中的sqlalchemy.url改为你数据库的jdbc连接地址,以我的为例:

修改alembic/env.py

首先我们找到里面的target_metadata变量,默认是None。接着在target_metadata = None上方加入如下代码:

import sys
from os.path import abspath, dirname
sys.path.append(dirname(dirname(abspath(__file__)))) 

然后我们需要引入我们的model目录,由于在pity里面,最后的初始化建表工作都是在curd目录进行的:

所以我这边是引入crud里面的Base。这个Base是啥玩意呢?

我们使用sqlalchemy,都需要引入各种model,这些model最终都会被加入到Base.metadata,这样sqlalchemy就知道你有哪些表需要处理了。

我们继续修改env.py,也就是告诉alembic你有哪些数据表(上文说的, 数据表都在Base.metadata)。

# 注意这个地方是要引入模型里面的Base,不是connect里面的
from app.crud import Base
# 告诉alembic 你的表数据在哪
target_metadata = Base.metadata 

开始生成迁移工作

要注意,我们配置这么多东西是为了让alembic知道你的model都在哪,你的数据库怎么连,这样它才能去对比差异并生成结果。

alembic revision --autogenerate -m "test" 

稍作等待,我们可以在alembic/versions目录看到对应的py文件:

里面会有drop_column(删除字段)这样的操作信息。但要注意,这并没有真正修改数据库。

变更数据库

alembic upgrade head 

执行上述命令,alembic就会根据你当前的版本(应该是你刚才生成的version的py脚本)去执行数据库变更操作。

这样,一个简单的迁移工作就完成了。接着我们聊聊注意事项。

FAQ

Q. 版本py脚本无变更信息出现

A. 请检查你的数据库是否真有变更,检查你的数据库url是否正确,检查你的model是否引入正确,如果操作都没问题,可以删除alembic目录和ini,重复上述操作(我昨晚就是这样的)

Q. 为什么字段重命名没有产生变更

A. 这玩意只校验了新增/修改/删除字段,这里的修改指的是字段的nullable这种修改,所以改字段名它不会检测。

Q. 我数据库里面有表没有定义到model,为啥变更给俺把表删除了?

A. 这个问题我也发现了,应该是有什么配置可以配置不删除未找到的表,但我目前还没有去研究,有后续会在底部留言。

最后,这个玩意相对比较鸡肋,建议不要大批量变更。可以频率高一点,比如有一点点改动就用它变更一下,而不要在史诗级改动的时候使用它。我个人的整体感受是,不太好用,但勉强能用。(因为暂时没有发现更合适的)

到此这篇关于python FastApi实现数据表迁移流程详解的文章就介绍到这了,更多相关python数据表迁移内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: pythonFastApi实现数据表迁移流程详解

本文链接: https://lsjlt.com/news/120083.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pythonFastApi实现数据表迁移流程详解
    目录啥是数据迁移1.需要新的数据表2.需要对现有表结构进行调整回到ORM迁移手段安装alembic初始化项目修改alembic.ini修改alembic/env.py开始生成迁移工作...
    99+
    2024-04-02
  • Springboot迁移到Micronaut实现过程详解
    目录设置上下文示例应用程序常见变化迁移 web 层迁移数据访问层迁移执行器设置上下文 JVM是一项伟大的技术。现代版本将运行的字节码编译为本机代码,具体取决于现有的工作负载。出于这个...
    99+
    2023-05-20
    Springboot迁移到Micronaut Springboot迁移
  • mongodb 数据块的迁移流程分析
    目录1. 基本概念1.1 Chunk(数据块)1.2 Chunk Size(数据块大小)1.3 Migration(数据块迁移)1.4 Migration Thresholds(迁移...
    99+
    2024-04-02
  • Entity Framework实现数据迁移
    一、合并和迁移 1、合并 合并是指“新的实体模型映射到数据库中,更新其结构”,例如:新增了实体类,表现在数据库中就是新增加实体类对应的数据表。删除了实体类,表...
    99+
    2024-04-02
  • MySQL数据如何实现迁移
    下文给大家带来有关MySQL数据如何实现迁移内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完MySQL数据如何实现迁移你一定会有所收获。   ...
    99+
    2024-04-02
  • Mysql如何实现数据迁移
    这篇文章将为大家详细讲解有关Mysql如何实现数据迁移,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL迁移通常使用的有三种方法:1、数据库直接导出,拷贝文件到新服...
    99+
    2024-04-02
  • django数据库迁移migration实现
    在django中,ORM(对象关系映射器—object-relational mapper)任务是:模型化数据库,创建数据库由另外一个系统负责(迁移–migr...
    99+
    2024-04-02
  • Django切换数据库和迁移数据详解
    目录前言基本步骤导出报错解决方法导入过程出错解决报错1: Duplicate entry报错信息解决方法一: 重新导出数据解决方法二: 删除 content_type&nb...
    99+
    2022-11-16
    Django切换数据库 Django迁移数据 Django切换MySQL数据库
  • 数据源管理 | 动态权限校验,表结构和数据迁移流程
    本文源码:GitHub·点这里 || GitEE·点这里一、数据同步简介1、场景描述如果经常接触数据开发,会有这样一个场景,服务A提供一个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供一个数据源,假设称为动态数据源B,...
    99+
    2023-06-02
  • mysql8.0.11数据目录迁移的实现
    mysql的存储目录默认是在/var/lib/mysql/,下面将修改默认存储目录. 本文使用mysql8.0.11版本,与mysql8.0.20版本不同, 0.20版本的数据迁移请看另一篇博客 : mysql8....
    99+
    2022-05-25
    mysql数据目录迁移 mysql 目录迁移
  • SQL实现数据过滤流程详解
    目录数据准备student 表过滤数据过滤单个值过滤null 值过滤集合BETWEEN IN NOT IN使用通配符过滤数据LIKE使用逻辑操作符组合WHERE子句数据准备student 表 CREATE TAB...
    99+
    2023-01-05
    SQL数据过滤 SQL过滤语句
  • 分库分表扩容怎么实现平滑数据迁移
    本篇内容主要讲解“分库分表扩容怎么实现平滑数据迁移”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分库分表扩容怎么实现平滑数据迁移”吧!一、背景2020年,&nb...
    99+
    2024-04-02
  • 阿里云数据库迁移步骤详解
    随着信息化的快速发展,企业对数据库的需求也在不断变化。有时,由于某种原因,企业可能需要将现有的数据库迁移到阿里云数据库。本文将详细介绍阿里云数据库迁移的步骤,希望能对您有所帮助。 一、准备阶段在开始迁移之前,需要对现有的数据库进行详细的了解...
    99+
    2023-11-10
    阿里 详解 步骤
  • linux中fastdfs数据迁移怎么实现
    在Linux中,可以使用以下方法实现FastDFS数据迁移: 使用FastDFS提供的工具进行数据迁移:FastDFS提供了一个...
    99+
    2023-10-24
    linux fastdfs
  • 如何实现oracle数据迁移到db2数据库
    这篇文章将为大家详细讲解有关如何实现oracle数据迁移到db2数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、表结构迁移在plsql中选择表----->d...
    99+
    2024-04-02
  • 如何在Aurora数据库中实现数据迁移
    在Aurora数据库中实现数据迁移可以通过以下几种方式: 使用AWS Database Migration Service(DMS...
    99+
    2024-04-02
  • 阿里云服务器能迁移:如何轻松实现数据迁移
    简介 阿里云服务器是一种强大的云计算服务,为用户提供了高性能、高可靠性的计算资源。在使用阿里云服务器的过程中,有时候我们需要将数据从一台服务器迁移到另一台服务器上。本文将介绍如何轻松实现阿里云服务器的数据迁移。数据迁移的步骤步骤一:备份数据...
    99+
    2024-01-30
    阿里 轻松 服务器
  • Dbeaver做数据迁移的详细过程记录
    目录1、选择源头数据库的表、鼠标右击、选择导出数据2、在数据转化弹框中,双击 ‘数据库,数据表’ 那一栏3、选择目标数据库,调整字段类型映射关系4、调整字段的映射关系5、勾选‘打开新连...
    99+
    2023-05-12
    dbeaver数据库迁移 dbeaver数据迁移 Dbeaver迁移数据库
  • Mysql存储过程如何实现历史数据迁移
    目录Mysql迁移历史数据需求陈述心路历程最终实现总结Mysql迁移历史数据 记录一下工作中由于业务需要以及系统的数据库模型变更,导致需要做一下历史数据迁移的解决办法 需求陈述 一共...
    99+
    2023-01-28
    Mysql存储过程 Mysql历史数据迁移 Mysql数据迁移
  • Oracle 10g DG 数据文件迁移的实现
    背景:某客户Oracle 10g 的DG由于空间不足,之前将部分数据文件迁移到其他目录,如今原目录扩容成功,要将之前迁移的数据文件再次迁移回来。  环境:Oracle 10.2.0.5 DG 单...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作