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

已经使用 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.hqwc.cn/news/703936.html

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

相关文章

优雅谈论大模型4:初识Token

Token 在继续前行之前,需要先停下来澄清下Token这个词,以及如何将原始的语料转化为Token,在细究背后的原理之后会更加优雅的理解大模型。任何的资讯都可以生成语料,而这些语料需要被机器理解以及供后续的模型训练,那么…

TopOn 正式聚合Kwai 旗下程序化广告平台——Kwai Network

**我们非常高兴的宣布,TopOn SDK 近日已正式聚合Kwai Network。**作为Kwai 旗下的程序化广告平台,Kwai Network 通过优质的变现能力及产品能力,为广大开发者提供高效及时的服务。 TopOn 聚合平台与Kwai Network 正式完成接入后,开…

Pencils Protocol Season 2 收官在即,展望Season 3 及其权益

此前 Scroll 生态 LaunchPad &聚合收益平台 Pencils Protocol(原 Penpad),推出了首个资产即其生态代币 PDD 的 Launch,Season 2 活动主要是用户通过质押 ETH 代币、组件战队等方式,来获得 Point 奖励,并…

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时,显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

【数据分析面试】44.分析零售客户群体(Python 集合Set的用法)

题目 假设你是一家在线零售商的数据库管理员,需要分析两类客户的数据。一个集合 purchased_customers 包含在最近一次促销活动中购买了商品的客户ID,另一个集合 newsletter_subscribers 包含订阅了新闻通讯的客户ID。编写一个函数 analyze_customers&am…

二进制搭建k8s

实验环境: k8s集群master01:192.168.1.11 k8s集群master02:192.168.1.22 master虚拟ip:192.168.1.100 k8s集群node01:192.168.1.33 k8s集群node01:192.168.1.44 nginxkeepalive01(master):192.168.1.55 nginxkeepalive02&a…

mmdetection训练(1)voc格式的数据集(自制)

mmdetection训练(1)voc格式的数据集(自制) 提前准备一、voc数据集二、修改配置代码进行训练(敲黑板!!!!!)1.数据集相关内容修改2.自定义配置文件构…

1688阿里商品详情API接口(标题|主图|SKU|价格等属性)

1688阿里商品详情API接口(标题|主图|SKU|价格等属性) 通过1688开放平台的商品详情信息API接口,开发者可以获取商品的详细信息,包括商品名称、价格、库存、描述、参数等。这些信息对于构建电商应用、比价工具或进行数据分析都是非常有用的 可以获取任意1…

详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!

嚯嚯嚯,很多宝子都想拥有自己不同的操作系统环境,用于学习或项目搭建。买服务器费钱,虚拟机则成为了一个很好的选择。本文详细介绍VMware Workstation Pro 16安装及win7虚拟机创建,保姆级教程奉上! 一、准备工作 VMw…

【C++算法】堆相关经典算法题

1.最后一块石头的重量 其实就是一个模拟的过程:每次从石堆中拿出最大的元素以及次大的元素,然后将它们粉碎;如果还有剩余,就将剩余的石头继续放在原始的石堆里面重复上面的操作,直到石堆里面只剩下一个元素&#xff0c…

住宅IP vs 数据中心代理IP

IP代理种类很多,其中包括住宅代理,数据中心代理,HTTP代理等多种分类。今天我们来介绍一下住宅IP代理与数据中心代理的区别。 住宅IP含义 住宅IP是指海外互联网服务供应商分配给家庭的IP地址,是固定的IP地址,可以为用户…

Leecode热题100---11:盛最多水的容器

题目: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…