背景与问题
- 痛点 / 需求: 在fastapi中使用sqlachemy的时候,我们在代码里建立了数据库模型models,数据库表结构是需要根据模型来创建。 但是当模型发生变更时,我们需要手动修改数据库表结构,这就很麻烦。 alembic可以帮助我们自动管理数据库表结构的变更。
Alembic 是一个轻量级的数据库迁移工具,与 SQLAlchemy 配合使用。它可以帮助你追踪数据库模型的变化,并能够轻松地进行版本升级和回滚。
使用方法
- 安装alembic
pip install alembic - 初始化alembic
alembic init alembic这会在项目根目录下创建一个alembic目录,里面包含了一些配置文件和迁移脚本。
-
配置alembic 打开alembic.ini文件,修改数据库连接字符串为你的数据库连接字符串。 sqlalchemy.url = mysql+pymysql://root:123456@localhost:3306/test_db
-
编写数据库模型 在models.py文件中编写数据库模型,例如: ``` python from sqlalchemy import Column, Integer, String from sqlalchemy.orm import declarative_base
- 修改alembic/env.py文件
打开alembic/env.py文件,修改target_metadata为你的数据库模型的Base.metadata,例如:
from models import Base target_metadata = Base.metadata - 创建数据库迁移脚本
alembic revision --autogenerate -m "create users table"这会在alembic/versions目录下创建一个迁移脚本,文件名类似20260223_create_users_table.py。
- 应用数据库迁移(更新到数据库)
alembic upgrade head这会将数据库 schema 升级到最新版本。
- 当数据库表更新的时候,需要重新创建迁移脚本
alembic revision --autogenerate -m "update something ..."这会在alembic/versions目录下创建一个新的迁移脚本,文件名类似20260223_update_users_table.py。
- 应用数据库迁移
alembic upgrade head这会将数据库 schema 升级到最新版本。
- 版本回退
<!-- 回退一个版本 --> alembic downgrade -1 <!-- 回退到指定版本 --> alembic downgrade xxxxxxx_update_users_table <!-- 回退到上一个版本 --> alembic downgrade head这会将数据库 schema 回退到上一个版本。 注意:回退后,数据库中已有的数据会被删除,所以请谨慎操作。
- 其他
- 查看数据库迁移历史
alembic history - 查看当前数据库版本
alembic current - 生成 SQL 但不执行
alembic upgrade head --sql这会生成升级数据库 schema 的 SQL 语句,但不会执行。
- 查看数据库迁移历史
⚠️注意: target_metadata = None 要注释掉,否则会覆盖