当前位置: 首页 > news >正文

alembic使用指南

一、alembic是什么?

Alembic 是一个用于 Python 数据库迁移和版本控制的工具。它与 SQLAlchemy(一个流行的 Python ORM 库)紧密集成,共同为 Python 应用程序提供数据库管理和迁移支持。

python使用mysql时常用SQLAlchemy+Alembic进行ORM和数据库迁移。

二、如何集成到项目中?

1.安装

uv install alembic==1.13.0 or pip install alembic==1.13.0

2.进入项目根目录 初始化Alembic

2.1 终端执行 alembic init alembic init 初始化命令 alembic 环境名称

项目中多出alembic目录

alembic.ini: Alembic 的主配置文件。

env.py: Alembic 运行时环境的 Python 脚本,用于配置 SQLAlchemy 引擎和元数据。

script.py.mako: 迁移脚本的模板文件。

versions/: 存放所有迁移脚本的目录。

图片

2.2 配置 alembic.ini(指定数据库连接字符串)

通过环境变量读取 不要硬编码

图片

2.3 配置 env.py (告诉 Alembic 你的 SQLAlchemy 模型在哪里,以便它能够进行自动检测。)

找到 target_metadata 变量,将其指向你的 SQLAlchemy Base.metadata 对象。

图片

解释一下:Base对象是所有模型类的基类,你创建的所有模型都要继承Base

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

创建Base虽然创建在哪都可以,最好放在数据库连接层,结构清晰,目录结构如下

图片

2.4 创建SQLAlchemy模型

所有模型集成Base对象,这样后面执行迁移就会自动检测所有更改的字段

图片

3.生成第一个迁移脚本

要提前安装 pip install pymysql

3.1 自动生成

终端输入命令: alembic revision --autogenerate -m "Create initial tables"

alembic revision: 创建一个新的数据库迁移脚本。

--autogenerate: 自动检测你的 SQLAlchemy 模型与数据库当前状态的差异,并生成相应的升级/降级 SQL 语句。

-m "Create initial tables": 为这个迁移脚本添加一个描述性消息,方便你理解其目的。

图片

图片

检查生成的迁移文件sql命令是否正常 不正常就手动或者找ai修复下

3.2 手动生成(推荐)

第一次创建迁移文件 上一次版本号为None

后续按照现有的文件格式创建新的迁移即可,版本号使用基于时间戳的uuid即可,上一个版本的版本号记得填。

upgrade:对应新的sql操作

downgrade:操作失败回滚

有时候alembic对于修改和删除的字段检测不出来,最好就手写迁移脚本

4.执行迁移

终端命令 alembic upgrade head 检查库中表是否存在

图片

逻辑流程图

初始化 Alembic 项目

↓

配置 alembic.ini (数据库连接) & env.py (加载 ORM 模型, 建立连接)

↓

定义 SQLAlchemy Base 和 ORM 模型

↓

ORM 模型发生变化?

├─ 是 (模型与数据库结构不一致)

│ ↓

│ 5. 生成迁移文件 (alembic revision --autogenerate)

│ (Alembic 比较 ORM 模型定义 与 MySQL 数据库实际结构)

│ ↓

│ 6. 人工检查并修改迁移文件 (确保 upgrade/downgrade 逻辑正确)

│ ↓

│ 7. 执行迁移 (alembic upgrade head)

│ (Alembic 读取迁移文件, 更新 MySQL 数据库结构, 并更新 alembic_version 表)

│ ↓

└─ 否 (模型与数据库结构一致)

↓

(无需迁移)

↓

应用程序启动 & 与更新后的 MySQL 数据库交互

三、常用的命令?

alembic revision --autogenerate -m "描述" 自动生成迁移脚本

alembic upgrade head 执行最新迁移

alembic current 查看当前数据库迁移脚本

alembic stamp <revision_id> 将数据库标记为指定版本(不执行迁移)

alembic history 查看迁移历史

http://www.cnnetsun.cn/news/40538.html

相关文章:

  • 2025年GEO优化机会与争议以及规范发展的必要性
  • 2026老年春晚怀化区域节目征集启动仪式在怀化学院举行
  • 【笔记篇】【硬件基础篇】电力电子元器件应用手册 阅读笔记(1)电阻器及其应用
  • 柠檬 软件测试之python全栈自动化测试工程师第25期
  • 为什么你的视觉AI项目总是耗时又低效?Florence-2-large-ft一站式解决方案
  • 基于php的微信小程序的学习交流平台系统(源码+lw+部署文档+讲解等)
  • springboot高校读书分享系统的设计与实现_34ur7fyk-
  • 如何快速解锁RouterOS无限权限:MikroTikPatch的终极指南
  • 测试工程师的增值型职业休假策略:从技术深耕到跨界突破
  • USART串口
  • SDET职业生涯中的关键决策点与路径选择
  • 第三方API密集型聚合服务的测试体系构建
  • System Informer:你的Windows系统管家,3大核心功能深度解析
  • 探索城市脉搏:解密共享单车数据背后的故事
  • 如何用abogen构建高质量有声书生成系统:从单文件到批量处理的完整指南
  • FastText实战进阶:解锁文本处理的极致性能与多场景应用
  • 车载功能测试都要做什么?总结来了~
  • 终极指南:掌握CogVLM多模态大模型核心技术
  • 【毕业设计/课程设计】基于Python的热门微博数据可视化分析源码+论文+PPT+数据
  • 监控选购全攻略:6大场景首选品牌,海康威视/格行视精灵各有侧重,小米性价比,萤石更全能;格行视精灵AOV技术+终生免流真好用?
  • 5步掌握Three.js延迟渲染技术:从多光源卡顿到流畅渲染的终极指南
  • Profinet转ModbusTCP网关:实现西门子1200PLC与打标卡稳定通讯
  • 工业设备实现全远程化运维的意义在哪
  • Signal-Android终极优化指南:7步实现APK大小缩减50%
  • TUnit集成WireMock:构建稳定可靠的.NET测试体系
  • 2025三季度报告出炉,平安银行存款平稳运行付息率降本增效
  • 掌握问题解决的艺术:波利亚《怎样解题》思维训练指南
  • 终极指南:如何快速上手MDPI Electronics论文LaTeX模板?
  • 已验证!零基础转行网络安全,我亲身实践的半年高效学习路线与复盘
  • 想从零转行网络安全?这是给你的入门指南与必须知道的避坑要点