alembic是否关心其迁移文件的名称?

Chr*_*ris 8 python sqlalchemy alembic

我正在审查同事写的一些代码,我注意到Alembic迁移文件中包含的迁移ID与文件名不匹配,例如文件18b6422c9d3f_some_migration.py包含

revision = 'c4218d61f026'
Run Code Online (Sandbox Code Playgroud)

我的同事不知道这是怎么发生的,所有其他修订文件的名称似乎都与他们的修订ID对齐.为了我自己的理智,我想重命名该文件以匹配其修订版ID.

很明显,Alembic修订版ID不包含任何真正的语义值,并且重命名文件似乎不会破坏任何内容.我仍然可以向前和向后运行迁移.但我对Alembic相当缺乏经验,我想确保这样做是安全的.

如果我git mv 18b6422c9d3f_some_migration.py c4218d61f026_some_migration.py可以期待任何长期问题?

Tho*_*tze 13

只要其中的revision变量设置为修订版ID,就可以重命名修订文件.

虽然修订版ID的前缀是新生成的修订文件的名称(其余部分来自描述迁移的注释),但是versions当集合修订标识及其之间的链接时,会考虑目录中的所有Python文件.

教程说:

每次Alembic对版本/目录运行操作时,它都会读取所有文件,并根据down_revision标识符如何链接在一起组成一个列表,其中down_revision表示第一个文件.

查看代码(版本0.8.5,alembic/script/base.pyScript._from_filename方法)显示脚本是从任何可以确定修订版ID的文件加载的,并且如果在脚本文件中设置了修订版ID,则使用它而不使用任何文件.无论如何都要考虑文件名.只有在没有明确设置修订版ID的情况下,才能从文件名的开头读取它.从版本0.2开始,这个逻辑似乎已经存在.

  • 我想添加另一个重命名修订文件的好理由,那就是修订文件可能以数字开头,这不是有效的 python 标识符名称。(虽然它有效,但当我想将这样的文件导入测试文件时,它给我带来了问题)。我对 Alembic 的这一点感到惊讶。 (2认同)