第一步是运行这个命令
alembic current
,你应该得到一个如上所述的错误(目标是确保这个命令返回一个有效的响应)。
你得到这个的原因是 bc alembic 对你当前的状态感到困惑。它假设你应该在修订中,39408d6b248d
但随后决定该修订是无效的。
为了调查这个问题,让我们找出哪些修订被alembic 认为是有效的,运行这个命令:
alembic history --verbose
您将获得所有先前修订的列表(注意:在每个修订旁边附加一条消息是个好主意。将其视为一个好的 git 提交消息)
Rev: 594cc72f56fd (head)
Parent: 262f40e28682
Path: ***************
adjust context_id in log table so that it is a substring of the object_id
Revision ID: 594cc72f56fd
Revises: 262f40e28682
Create Date: 2015-07-22 14:31:52.424862
Rev: 262f40e28682
Parent: 1dc902bd1c2
Path: ***************
add context_id column to log table
Revision ID: 262f40e28682
Revises: 1dc902bd1c2
Create Date: 2015-07-22 11:05:37.654553
Rev: 1dc902bd1c2
Parent: <base>
Path: ***************
Initial database setup
Revision ID: 1dc902bd1c2
Revises:
Create Date: 2015-07-06 09:55:11.439330
上述修订39408d6b248d
中显然不存在修订。此修订版存储在数据库中的 alembic_table 中。您可以通过转到您的 dbase 并运行来验证:
$ select * from alembic_version;
version_num
--------------
57ac999dcaa7
因此,现在您应该查看数据库的状态,并查看它与上面输出的修订版相比适合的位置:
在我的情况下,通过查看我的 dbase,很明显我现在处于哪个修订版中.. dbase 已设置,但尚未包含其他修订版。
所以现在我用我从上面的历史命令中找到的值替换 dbase 上的值:
vibereel=> update alembic_version set version_num = '1dc902bd1c2';
现在运行 alembic current 返回
INFO [alembic.migration] Context impl PostgresqlImpl.
INFO [alembic.migration] Will assume transactional DDL.
1dc902bd1c2
完毕。