Alembic 的使用(配合一款免费云数据库MemfireDB)

news2025/2/28 21:50:08

已经使用 Go 开发好一段时间了,最近因为工作原因又重操旧业搞起了 Python,基于 FastAPI 进行接口开发,然后去找了一下相关的脚手架,发现这其中挺多都用到了 Alembic,之前没使用过,于是学习了一下,现学现用,其中也遇到了一点坑,在这里做一下笔记分享。

PS:最近发现的一款云数据库MemfireDB,目前是免费使用的,这个是MemefireDB官网,大家也可以去薅一下羊毛。我觉得自己平时捣腾一下小的项目使用云数据库还是不错的选择,省去了自己在本地或者服务器上去搭建数据库的时间,而且目前总体看来还是比较稳定的,MemFireDB 兼容 Postgres 接口,所以可以直接把 MemFireDB 当作 Postgres 数据库进行使用,使用方法也很简单,有兴趣可以了解使用一下,另外他们还有适合前端开发人员使用的 Baas 平台,我准备尝试试用一下,虽然我只是略懂前端😂,如果后续我觉得好用的话,再跟大家分享一下。

一、项目结构

二、Alembic 的使用

1、安装 alembic (python3.8环境)

pip install alembic

2、生成 alembic 文件

在定义好自己的模型类(models/users.py Users)之后 ,在项目根目录下执行alembic init alembic(自己定义alembic生成的文件夹名称),会自动生成 alembic 文件夹以及 alembic.ini 文件。

3、修改文件配置

1)修改 alembic.ini 文件,新增如下两行

MemfireDB 的连接信息获取方式如下:

【备注】图中 alembic_version 和 users 表是后面执行了相关迁移命令后生成的

2)修改 env.py

3)上一步中导入的 Base,我的我在这里也将代码贴出来一下以供参考

# db/base.pyfrom db.base_class import Base  # 导入创建的base类
from models.users import Users     #导入创建的模型类 
#db/base_class.py

from typing import Any

from sqlalchemy.ext.declarative import as_declarative, declared_attr


@as_declarative()
class Base:
    id: Any
    __name__: str
    # Generate __tablename__ automatically
    @declared_attr
    def __tablename__(cls) -> str:
        return cls.__name__.lower()

4、执行指令,生成迁移的版本文件,以及对应的数据库表

(bidAnalysisEnv) ➜  bid-analysis alembic revision --autogenerate -m "init"
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'users'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_id' on '['id']'
  Generating /Users/zhangyanli/fastapiProjects/bid-analysis/alembic/versions/3fed3fb70404_init.py ...  done
(bidAnalysisEnv) ➜  bid-analysis alembic upgrade head                     
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 3fed3fb70404, init

此时再去看数据库中,就会生成对应的 users 表了。如果模型字段有变动,再重复执行上述指令。

三、对于 MemfireDB的使用

【附:alembic 相关指令】

  • init:创建一个alembic仓库。
  • revision:创建一个新的版本文件。
  • –autogenerate:自动将当前模型的修改,生成迁移脚本。
  • -m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
  • upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
  • [head]:代表最新的迁移脚本的版本号revision。
  • downgrade:会执行指定版本的迁移文件中的downgrade函数。
  • heads:展示head指向的脚本文件版本号。
  • history:列出所有的迁移版本及其信息。
  • current:展示当前数据库中的版本号。

另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL创建存储过程函数(2)

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) DEFAULT NULL,sex char(2) DEFAULT NULL,i…

STM32时钟系统和时钟树

目录 STM32时钟系统 认识时钟树 什么是时钟 认识时钟树(F407) 配置系统时钟 系统时钟配置步骤 外设时钟使能和失能 sys_stm32_clock_init函数(F4) 时钟配置一般步骤 System文件夹_时钟系统工作原理 System文件夹介绍 Sys文件介绍 Delay文件介绍 Systic工作原理 S…

Ps 滤镜:干画笔

Ps菜单:滤镜/滤镜库/艺术效果/干画笔 Filter Gallery/Artistic/Dry Brush 干画笔 Dry Brush滤镜用于模拟使用干画笔技术(介于油彩和水彩之间)绘制的效果。此滤镜特别适用于为图像添加粗糙而富有表现力的笔触效果,同时减少细节&…

计算机发展史故事【17】

任天堂崛起 七十年代美国雅达利公司开创一个高科技的电脑游戏业。无独有偶,一家专营电脑游戏机的日本任天堂公司,自八十年代初期把它的家庭电脑游戏机(FC)投放市场后,不平静的世界被再一次激起轩然大波。这个小小的日本…

测缝计测量的是实际缝宽吗?

在土木工程中,测缝计作为一种重要的监测工具,广泛应用于桥梁、隧道、大坝等大型结构中,用以测量和监控结构接缝或裂缝的实际宽度变化。然而,有些人可能会产生疑问:测缝计测量的是实际缝宽吗?本文将对这一问题进行深入…

Linux基础之进程的优先级

目录 一、进程优先级的概念 二、进程优先级的查看 三、怎么修改进程优先级 四、进程饥饿 一、进程优先级的概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linu…

5W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP05AL系列

TP05AL系列产品是一款经济型开板式开关电源,输出功率为5W,具有可靠性高、小体积、性价比高等特点,广泛用于工控和电力仪器、仪表、智能家居等相关行业。

云计算第十九课

目录操作 查找文件 locate ocate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库 索引构建过程需要遍历整个根文件系统,很消耗资源 locate和updatedb命…

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言: 在日常工作中,数据分析中常常涉及搭建指标体系,搭建电商需要接入的电商API接口本文主要以电商为案例,来讲讲如何搭建指标体系。 指标体系的定义: 指标体系是由一系列指标组成的,这些指标是基于不同的…

openGauss一主两备集群异常断电后不能正常启动的解决过程简记

背景 因异常断电后opengauss 5.0.0版本,一主两备集群启动失败。 报错不是主机,由于当时没有截图,查看日志后发现报错是: 定位过程 Day1 1. 尝试用另外两台机器启动每台机器 发现都报错自己不是主机,像极了唐僧被妖…

天锐绿盾 | 设计院、机械制造行业透明加密cad图纸、图纸防泄密软件

天锐绿盾为设计院及机械制造行业量身打造的透明加密CAD图纸解决方案,专注于保障这些行业中的核心资产—设计图纸的安全。通过集成先进的加密技术和访问控制策略,该软件系统能有效防止图纸的未经授权访问和意外泄密。 PC地址: https://isite…

把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值,字符串中包含的字符可以是0-9,A-F,a-f

方法一: 1-十六进制是一种基数为16的计数系统,是一种逢16进1的进位制。例如十六进制0x57,写成十进制是 5*16^17*16^087。第一位乘16的0次方,第二位乘16的1一次方。 2-如果0x57按顺序来转化,不太好转,因为…

PHP xdebug

使用场景 一台MAC上安装了phpstorm,虚拟机安装了对应的web程序,需要调试。 坑点,网上教程太多,不如看官网,需要按照xdebug版本来配置php.ini https://www.jetbrains.com/help/phpstorm/2023.3/configuring-xdebug.htm…

如何系统地有效学习Power Query?

系统地有效学习Power Query,可以遵循以下步骤: 首先,了解Power Query在数据处理和分析中的作用,它如何帮助你简化数据整理工作,将重复数据操作自动化,并与Excel、Power BI等工具有非常高的集成。 1. 官方…

JavaScript对象设计哲学:八种模式塑造高效代码

🔥 个人主页:空白诗 文章目录 一、引言 🚀二、Object 构造函数 🧱📌 基本用法📌 重要性📌 实际应用案例 三、对象字面量 📘📌 定义属性📌 定义方法&#x1f4…

基于Spring封装一个websocket工具类使用事件发布进行解耦和管理

最近工作中,需要将原先的Http请求换成WebSocket,故此需要使用到WebSocket与前端交互。故此这边需要研究一下WebSocket到底有何优点和不可替代性: WebSocket优点: WebSocket 协议提供了一种在客户端和服务器之间进行全双工通信的…

制氧机负离子的作用与好处深度解析

随着现代生活节奏的加快,空气质量逐渐下降,人们对健康生活的追求也日益增强。在这样的背景下,制氧机负离子功能因其多重健康效益而备受关注。本文将深入探讨制氧机负离子的作用与功效,帮助大家更好地了解并应用这一健康科技。 我们…

Win11环境下,AirSim和UE4安装

这里主要描述一下我前段时间成功安装AirSim和UE4的流程,中间也遇到过一些问题,刚开始我安装的是最新的UE5,但是不知道什么情况运行AirSim中的blocks模块始终没有成功,VisualStudio中提示Unable to find plugin PhysXVehicles &…

回收站删除的文件怎么恢复?6个恢复技巧记得收藏!

“回收站删除的文件还有机会恢复吗?应该怎么操作才能恢复回收站里删除的文件呀?本人纯小白,希望大家推荐几个简单易懂的恢复方法。” 在使用电脑的过程中,我们时常会不小心将重要文件误删到回收站,甚至直接从回收站中彻…

AI预测体彩排3采取878定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月16日预测第2弹

昨天的87823大底测试第一次测试,已经成功命中! 今天继续测试,仍旧目标为:10期中至少5中期。好了,废话不多说了,直接上结果吧~ 首先,878定位如下: 百位:4,5,6,3,8,1,9,0…