我正在查看同事写的一些代码,我注意到Alembic迁移文件中包含的迁移ID与文件名不匹配,例如:文件18b6422c9d3f_some_migration.py
包含
revision = 'c4218d61f026'
我的同事不知道这是怎么发生的,所有其他修订文件的名称似乎都与他们的修订版ID对齐。为了我自己的理智,我想重命名该文件以匹配其修订版ID。
似乎很清楚Alembic revision IDs don't hold any real semantic value,并且重命名文件似乎没有破坏任何东西。我仍然可以向前和向后运行迁移。但我对Alembic缺乏经验,我想确保这样做是安全的。
如果我git mv 18b6422c9d3f_some_migration.py c4218d61f026_some_migration.py
可以预期任何长期问题吗?
答案 0 :(得分:13)
只要其中的revision
变量设置为修订版ID,就可以重命名修订文件。
虽然修订版ID的前缀是新生成的修订文件的名称(其余部分来自描述迁移的注释),但在versions
目录中的所有Python文件都会在集合修订版ID中被考虑以及它们之间的联系。
每次Alembic对版本/目录运行操作时, 它读取所有文件,并根据如何组成一个列表 down_revision标识符与down_revision链接在一起 无代表第一个文件。
查看代码(版本0.8.5,alembic/script/base.py
,Script._from_filename
方法)显示从任何可以确定修订版ID的文件加载脚本,以及修订版本id在脚本文件中设置,使用它而不考虑文件名。只有在没有明确设置修订版ID的情况下,才能从文件名的开头读取它。从版本0.2开始,这个逻辑似乎已经存在。
答案 1 :(得分:1)
您问题的具体答案是是的,您可以重命名迁移而不会出现长期问题。事实上,如果您因为对实际版本ID的混淆而不愿意,则您更有可能遇到长期问题。
在文件名中包含修订ID的重点是让查找包含特定修订版的文件变得容易,错误标记的文件可能会在几个月内轻易将您丢失。
您可以将迁移文件的名称视为提交消息,而修订ID非常类似于提交哈希。我个人有时会重命名我的迁移文件,以使名称更有用,因为自动生成的名称有时很丑或由于自动生成长度限制而遗漏了消息的关键位。