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

ops/2024/10/25 7:39:52/

已经使用 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.pyfrom typing import Anyfrom sqlalchemy.ext.declarative import as_declarative, declared_attr@as_declarative()
class Base:id: Any__name__: str# Generate __tablename__ automatically@declared_attrdef __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.ppmy.cn/ops/41558.html

相关文章

20240514基于深度学习的弹性超材料色散关系预测与结构逆设计

论文:Dispersion relation prediction and structure inverse design of elastic metamaterials via deep learning DOI:https://doi.org/10.1016/j.mtphys.2022.100616 1、摘要 精心设计的超材料结构给予前所未有的性能,保证了各种各样的具…

Linux监听某个进程,自动重启

文章目录 前言一、使用 bash 脚本编写监控程序二、使用 systemd总结 前言 在 Linux 下监听某个进程,当进程异常退出后自动重启,可以使用bash脚本编写监控程序,也可以使用系统工具如 systemd 或 supervisor。 一、使用 bash 脚本编写监控程序…

训练集、测试集与验证集:机器学习模型评估的基石

在机器学习中,为了评估模型的性能,我们通常会将数据集划分为训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)。这种划分有助于我们更好地理解模型在不同数据上的表…

C++复习 -- 继承

继承基本概念 继承是面向对象编程(OOP)中的一个核心概念,特别是在C中。它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的属性和方法。 继承的主要目的是实现代码重用&#xff0…

thinkphp8扩展think-swoole4.0-事件监听代码

首先服务端配置监听 swoole.php <?phpreturn [http > [enable > true,host > 0.0.0.0,port > 8000,worker_num > swoole_cpu_num(),options > [],],websocket > [enable > true,handler > \think\swo…

Mac电脑安装打开APP显示问题已损坏 问题解决

当MAC电脑安装完软件打开时&#xff0c;显示文件已损坏&#xff0c;无法打开。搜了很多教程终于找到解决方案&#xff0c;记录下方便以后再用。 我的mac电脑是intel芯片的&#xff0c;如果你遇到这个问题&#xff0c;可以参考我的这个方案。 1.首先当打开软件后出现 “xx软件已…

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下&#xff0c;ChatGPT、Sora、Gemini、文言一心 等新技…

使用poi生成word文件时,zip相关的报错

apache poi-检测到Zip Bomb解决方案_zip bomb detected! the file would exceed the max. -CSDN博客