Миграции схемы данных и эволюция моделей
Python
Senior
Яндекс
Как вы подходите к эволюции моделей данных (ORM-сущности, Pydantic-схемы) без ломки обратной совместимости? Приведите пример soft-миграции поля.
Ответы
Эволюция схем
Подход:
- сначала добавить новое поле с default/nullable;
- поддерживать оба варианта (старое и новое имя) в коде/схемах;
- мигрировать данные в фоне;
- затем удалить старое поле.
Пример soft-миграции API:
```python
class UserIn(BaseModel):
name: str | None = None
full_name: str
@root_validator(pre=True)
def compat(cls, values):
if 'full_name' not in values and 'name' in values:
values['full_name'] = values['name']
return values
```