解决微服务间使用 alembic 出现版本冲突导致数据冲突问题
Terry
It has been 0 days since the last update of this post. Some contents may be outdated. Please pay attention to screening.

不同服务间数据库迁移

在不同服务中,需要依赖不同的 models 来迁移数据库,

此时出现会出现较为常见的异常

1
FAILED: Can't locate revision identified by 'cabd23751e2b'

导致这个警告的原因是,数据库中存的版本号不在迁移脚本文件中

解决办法

1. 生成一个新的迁移脚本

1
alembic revision -m "Base migration"

这会生成一个迁移文件,比如:

1
alembic/versions/<new_revision_id>_base_migration.py

2. 手动设置 revision 和 down_revision 打开该迁移文件,

将 revision 修改为 cabd23751e2b,并设置 down_revision 为 None,因为它是初始版本

1
2
3
4
5
6
7
8
9
10
11
"""Base migration

Revision ID: 3aa008faa21c
Revises:
Create Date: 2024-12-04 14:20:52.118815

"""
from typing import Sequence, Union
# ...
revision: str = 'cabd23751e2b'
down_revision: Union[str, None] = None

3. 同步数据库版本, 使用 stamp 命令将数据库版本与迁移脚本同步

1
alembic stamp cabd23751e2b

4. 生成后续迁移脚本 运行 alembic revision –autogenerate 生成其他需要的迁移脚本。

1
alembic revision --autogenerate -m "init_db"

5. 再执行 alembic upgrade head 将刚生成的迁移文件映射到数据库

本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明