Skip to content

Довести модели до состояния миграций #187

@justanothercatgirl

Description

@justanothercatgirl

В чём проблема

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

Как это проявляется

когда мы клонируем чистый 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

Labels

good first issue 👶Задача подходит для новичковrefactoring 🧹Закрытие технического долга

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions