Alembic заботится о том, как называются его файлы миграции?

Я просматриваю код, который написал коллега, и я заметил, что идентификатор миграции, содержащийся в файле миграции перегонного куба, не соответствует имени файла, например файл 18b6422c9d3f_some_migration.py содержит

revision = 'c4218d61f026'

мой коллега не знает, как это произошло, и имена всех других файлов ревизий, похоже, совпадают с их идентификаторами ревизий. Для моего собственного здравомыслия, я хотел бы переименовать файл в соответствии с его ИД.

очевидно, что аламбик идентификаторы версий не имеют реального семантического значения, и переименование файла, похоже, ничего не сломает. Я все еще могу запустить миграцию вперед и назад. Но я довольно неопытен с перегонным кубом, и я хотел бы убедиться, что это безопасно.

Если Я git mv 18b6422c9d3f_some_migration.py c4218d61f026_some_migration.py могу ли я ожидать каких-либо долгосрочных проблем?

2 ответов


можно переименовать файл ревизии до тех пор, пока revision переменная внутри него установлена в идентификатор ревизии.

в то время как идентификатор ревизии добавляется к имени вновь созданного файла ревизии (оставшаяся часть выводится из комментария, описывающего миграцию), все файлы Python внутри versions каталог учитываются при сборе идентификаторов ревизий и связей между ними.

учебник говорит:

каждый раз, когда перегонный куб выполняет операцию против версий / каталога, он считывает все файлы и составляет список, основанный на том, как идентификаторы down_revision связываются вместе с down_revision Нет, представляющий первый файл.

посмотрите на код (версия 0.8.5,alembic/script/base.py на Script._from_filename метод) показывает, что сценарий загружается из любого файла, для которого можно определить идентификатор редакции, и если идентификатор редакции установлен внутри файла сценария, он используется не обращая никакого внимания на имя файла. Только если нет ИД явно это было читать от начала файла. Эта логика, по-видимому, существовала с версии 0.2.


конкретный ответ на ваш вопрос заключается в том, что да, вы можете переименовать миграцию без долгосрочных проблем. На самом деле, у вас больше шансов иметь долгосрочные проблемы, если вы не из-за путаницы с фактическим идентификатором ревизии.

весь смысл наличия идентификатора ревизии в имени файла заключается в том, чтобы легко найти файл, содержащий определенную ревизию, и файл с неправильной меткой может легко сбросить вас через пару месяцев.

вы можете подумайте об имени файла миграции как о сообщении фиксации, в то время как идентификатор ревизии очень похож на хэш фиксации. Я лично иногда переименовывал свои файлы миграции, чтобы сделать имя более полезным, так как автогенерированные имена иногда уродливы или оставляют ключевой бит сообщения из-за ограничений длины автогенерации.