Skip to content

Update Base model#83

Open
V-pix wants to merge 5 commits intoProCharity:developfrom
V-pix:develop
Open

Update Base model#83
V-pix wants to merge 5 commits intoProCharity:developfrom
V-pix:develop

Conversation

@V-pix
Copy link

@V-pix V-pix commented Dec 27, 2022

No description provided.

Copy link
Member

@AntonZelinsky AntonZelinsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так, вроде всё хорошо, но нужно ещё мигрировать данные. Посмотри ПР Ани, где она мигрировала данные и сделай так же.
Что мигрировать? у таск поля created_date и updated_date; у статистики added_date; у причины отмены added_date и updated_date; у внешнего пользователя created_date и updated_date.
То есть, тебе нужно сначала выполнить те миграции которые уже созданы, потом, в этом же файле идёт миграция данных, где ды данные из этих колонок перегоняешь в соответствующие, а потом, удаляешь старые колонки из базы. И это тоже всё в одной миграции сделать нужно.
Хорошо бы ещё у натификейшенов перегнать из sent_date, в дату создания, но старое поле удалять не обязательно.

app/models.py Outdated
updated_at = Column(
TIMESTAMP, server_default=func.current_timestamp(), nullable=True, onupdate=func.current_timestamp()
)
is_deleted = Column(Boolean(), default=False)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю избавиться от этого поля. Что-то я не нашёл сценариев его использования. Если брать вариант замены архивации, то лучше не будем этого делать, а то выигрыша нет, а в дебри залезем.

Comment on lines +58 to +59
op.add_column('users_categories', sa.Column('audit_id_users_categories', sa.INTEGER(), autoincrement=False, nullable=True))
op.create_foreign_key('users_categories_audit_id_users_categories_fkey', 'users_categories', 'base_audit', ['audit_id_users_categories'], ['id'])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это что-то из старого кода осталось.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет!
У меня вопрос по таблицам:

Таблица Task уже имеет свои аналоги поля created_at, updated_at - поэтому в миграции у них меняется только название, а данные сохраняются.

Но свои аналоги полей created_at, updated_at есть и у других таблиц в БД

  • Statistics имеет одно поле added_date - это не аналог created_at?
  • ReasonCanceling имеет поля added_date, updated_date
  • ExternalSiteUser имеет поля created_date, updated_date

Может для этих таблиц тоже стоит только перепаивать колонки по-новому, а не создавать новые?

@AntonZelinsky скажи, пожалуйста, эти поля (created_date, added_date) схожи у таблиц и подойдут ли им на замену поля базовой модели?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точно, Аня, спасибо. Ты очень умная и наблюдательная.
Я какое-то костыльное решение предлагаю.(
Там где есть аналогичные колонки которые собирались удалять, не нужно их удалять, а просто переименовать.

@V-pix
Copy link
Author

V-pix commented Dec 31, 2022

Добрый день!

Вчера созвонились с Аней и нашли решение только без переопределения Base (закомменченная часть в models.py). Если переопределять базовую модель, то не проходит предыдущая миграция, которую Аня писала. Ссылка на описание ошибки в Пачке https://app.pachca.com/chats/3910846?thread_id=167839 .

И еще у нас есть вопросы:

• В задаче Notion написано, что надо сделать две миграции, и среди старых миграций есть две миграции - одна добавляет колонки, вторая меняет тип колонок. Вопрос – надо две миграции на добавление и изменение названия колонок, или можно все в одной миграции сделать?

• Нормально ли решение, что создаются поля с пустыми значениеми (если такого поля с данными не было в базе), или надо прокидывать TIMESTAMP с временем сервера?

• И итоговый вопрос, делать ли переопределение Base, в таком случае нужно будет менять миграцию Ани, подробнее об это она расскажет

@ani-zia
Copy link

ani-zia commented Dec 31, 2022

•И итоговый вопрос, делать ли переопределение Base, в таком случае нужно будет менять миграцию Ани, подробнее об это она расскажет

Да, подтверждаю что моя миграция падает на этом запросе в базу:
parent_categories = set(db_session.execute(select(Category).join(Users_Categories).where(Category.parent_id.is_(None))).scalars())

потому что пытается забрать из базы все поля модели Category, в том числе пока не существующие поля created_at, updated_at которые только в следующей миграции подъедут :(
Вот запрос из трейса ошибки:
[SQL: SELECT categories.created_at, categories.updated_at, categories.id, categories.name, categories.archive, categories.parent_id FROM categories JOIN users_categories ON categories.id = users_categories.category_id WHERE categories.parent_id IS NULL]

PS. мы не смотрели все более старые миграции, не знаю, проходят ли они)
@AntonZelinsky
Как поступать на проектах в таких случаях, когда меняется родительская модель и надо все миграции переписывать получается?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants