-
Notifications
You must be signed in to change notification settings - Fork 0
Description
В чём проблема
Неизвестно, как, но получилось так, что у нас есть дофига миграций, которые были написаны вручную, при этом не было создано соответствующих изменений в моделях.
Как это проявляется
когда мы клонируем чистый dwh-definitions и прописываем alembic upgrade head && alembic revision --autogenerate, он генерирует миграцию на 352 строчки кода, которые эффективно "отменяют" все изменения, которые были сделаны в миграциях, и которых нет в моделях.
Сама задача
Нужно внести все нужные изменения в описания таблиц, чтобы при прописывании alembic revision --autogenerate, файл миграции был пустым (функции upgrade и downgrade содержат только pass).
Пример того, как это сделать
создаём временный файл миграции:
alembic revision --autogenerate
Допустим, у нас в файле миграций следующие строчки:
op.alter_column(
'dm_lecturer_comment_act',
'mark_weighted',
existing_type=sa.DOUBLE_PRECISION(precision=53),
type_=sa.Integer(),
existing_comment='Взвешенная оценка преподавателя',
existing_nullable=False,
existing_server_default=sa.text("'0'::double precision"),
schema='DM_RATING',
)Мы понимаем, что миграция пытается существующий тип DOUBLE_PRECISION изменить на Integer. Идём в файл profcomff_definitions/DM/rating.py, находим там класс DmLecturerCommentAct и колонку mark_weighted. Видим:
mark_weighted: Mapped[int] = mapped_column(comment="Взвешенная оценка преподавателя", default=0, server_default="0")Меняем int на float:
mark_weighted: Mapped[float] = mapped_column(<в нашем примере то же самое>)Удаляем файл миграции, который мы сделали, создаём новый и видим, что в нём осталось 332 строчки кода и нет кода, с которым мы работали
И так надо сделать, пока в файле миграций не останется ничего...
доп инфа
- alter_column удаляется подгонкой модели
- drop_table_comment - надо посмотреть в
downgrade, какой коммент был до этого, и вернуть его - если будете использовать
python -m definitionsвместоalembic, то строчек кода в миграции будет около 700, и будут операции, связанные с группами. Их не трогать! это операции по типуcreate_group,grant_on_schema,revoke_on_tableи т.п.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status