alembic util 命令错误找不到标识符

alembic util command error can't find identifier

我正在尝试使用 alembic 来处理我项目中的本地迁移。它第一次工作,但后来我需要删除文件夹并重新启动。(不要问为什么,我只是不得不)我正在关注 this tutorial 并且我 运行 命令

python manage.py db init

没关系。但是当我尝试 运行

python manage.py db migrate

我收到这个错误:

alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d'

现在,似乎 alembic 正在寻找不再存在的修订版。无论如何让 alembic 忘记那个文件?或者重新开始从 None 到 -> 自动生成的比较?

Alembic 将版本历史记录存储在您的数据库中。因此,它使用存储在数据库中的值来搜索修订。我个人数据库的版本号存储在 table alembic_version:

mysql> SELECT * FROM alembic_version;
+-------------+
| version_num |
+-------------+
| c8ad125e063 |
+-------------+
1 row in set (0.00 sec)

提示:如果它是基于 SQL 的数据库,请使用命令 SHOW TABLES 来查看 tables。

要解决您的问题,只需使用以下命令:

DROP TABLE alembic_version;

或者数据库版本的名称 table 是什么。 然后你需要使用命令重新初始化迁移文件夹:

python manage.py db init

然后创建一个新的迁移:

python manage.py db migrate

然后您应该可以在 alembic 中进行工作迁移。

SirKaiserKai 的解决方案对我不起作用,可能是因为我上次迁移并删除了一个我应该保留的文件时犯了一些愚蠢的错误。

我没有删除 alembic_revision table,而是更新了 version_num 中的值以匹配我知道我的数据库所在的位置。

确保使用与数据库当前状态相匹配的文件的迁移 ID

  1. 查看遗漏的迁移号

    psql=> SELECT * FROM alembic_version;
    +-------------------------+
    |      version_num        |
    +-------------------------+
    | <the missing migration> |
    +-------------------------+
    (1 row)
    
  2. 更新值

    psql=> UPDATE alembic_version
    psql->    SET version_num = '<true state of DB>'
    psql->    WHERE version_num = '<the missing migration>';
    UPDATE 1
    

如果您的数据库处于迁移文件以外的状态 <true state of DB>,那么您将继续出现错误。但是,您可以 运行 alembic upgrade head 如果 <true state of DB> 是一个从您之前中断的地方继续的迁移文件,那么 运行 所有迁移 post 也会处于这种状态。

如果您遇到与上述相同的问题 运行,请执行以下命令:

Drop your local Alembic table

 - drop table alembic_version;

然后 运行 以下 alembic 命令:

 - alembic stamp head
 - alembic revision --autogenerate -m "New revision"
 - alembic upgrade head
 - alembic stamp head

邮票头允许 alembic 拥有最新的 table 结构。 运行在你的新修订之前。