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

Python alembic是否关心其迁移文件的名称?,python,sqlalchemy,alembic,Python,Sqlalchemy,Alembic,我正在查看一位同事编写的一些代码,我注意到Alembic迁移文件中包含的迁移ID与文件名不匹配,例如文件18b6422c9d3f_some_migration.py包含 revision = 'c4218d61f026' 我的同事不知道这是怎么发生的,所有其他修订文件的名称似乎与它们的修订ID一致。为了我自己的理智,我想重命名该文件以匹配其修订ID 很明显,重命名文件似乎不会破坏任何东西。我仍然可以前后运行迁移。但我对Alembic缺乏经验,我想确保这样做是安全的 如果我git mv 18b6

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

revision = 'c4218d61f026'
我的同事不知道这是怎么发生的,所有其他修订文件的名称似乎与它们的修订ID一致。为了我自己的理智,我想重命名该文件以匹配其修订ID

很明显,重命名文件似乎不会破坏任何东西。我仍然可以前后运行迁移。但我对Alembic缺乏经验,我想确保这样做是安全的


如果我
git mv 18b6422c9d3f_some_migration.py c4218d61f026_some_migration.py
我能预料到任何长期问题吗?

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

虽然修订id确实在新生成的修订文件的名称前加了前缀(其余部分来自描述迁移的注释),但在收集修订id及其之间的链接时,将考虑
versions
目录中的所有Python文件

说:

每次Alembic对版本/目录运行操作时, 它读取中的所有文件,并根据 向下修订标识符链接在一起,与的向下修订 无表示第一个文件


查看代码(版本0.8.5,
alembic/script/base.py
script.\u from\u filename
方法)可以发现脚本是从可以确定修订id的任何文件加载的,如果在脚本文件中设置了修订id,则使用脚本时将不考虑文件名。只有在没有明确设置修订id的情况下,才能从文件名的开头读取修订id。这一逻辑似乎自0.2版以来就已经存在。

您的问题的具体答案是是的,您可以重命名迁移,而不会出现长期问题。事实上,如果您不知道实际版本ID,您更有可能会遇到长期问题。

在文件名中包含修订ID的全部目的是使您能够轻松找到包含特定修订的文件,而错误标记的文件可能会在几个月内轻易地将您丢弃


您可以将迁移文件的名称视为提交消息,而修订ID非常类似于提交散列。我个人有时会重命名迁移文件,以使名称更有用,因为自动生成的名称有时很难看,或者由于自动生成长度限制而遗漏了消息的关键部分。

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