Migracja modeli FLASK do bazy

To jest złoty, atomowy, bezpieczny workflow, kiedy:

  • modele się zmieniły,
  • baza była modyfikowana ręcznie,
  • migracje są niespójne,
  • chcesz wrócić do pełnej synchronizacji bez walki z błędami.

Schemat:

flask db stamp head
flask db migrate -m "aktualizacja modeli i zmian"
flask db upgrade

jest idealny w takich sytuacjach.

🔍 Dlaczego to działa tak dobrze?

1. flask db stamp head

Mówisz Alembicowi:

„Uznaj, że baza jest już na najnowszej wersji migracji — niczego nie wykonuj.”

To resetuje stan migracji bez dotykania struktury bazy.

2. flask db migrate

Alembic patrzy na:

  • aktualną bazę,
  • aktualne modele SQLAlchemy,

i generuje migrację, która wyrównuje różnice.

To jest moment, w którym:

  • usuwa zbędne kolumny,
  • dodaje brakujące,
  • poprawia typy,
  • usuwa/odtwarza FK,
  • synchronizuje indeksy.

3. flask db upgrade

Wykonuje nową migrację i od tego momentu:

  • baza = modele,
  • migracje = aktualny stan,
  • wszystko jest spójne.

🧠 Kiedy ten workflow jest najlepszy?

  • po ręcznym grzebaniu w SQL,
  • po usunięciu relacji z modeli,
  • po dodaniu kolumn ręcznie,
  • gdy migracje są popsute lub niespójne,
  • gdy masz błędy typu:
    • „duplicate column”
    • „cannot drop index”
    • „foreign key constraint fails”
    • „table already exists”
    • „column already exists”

To jest najczystszy sposób na przywrócenie porządku.

🔥 Pro tip

Jeśli pracujesz dużo z modelami i migracjami, to workflow:

flask db stamp head
flask db migrate
flask db upgrade

jest świetny po każdej większej refaktoryzacji modeli, bo:

  • nie musisz ręcznie naprawiać migracji,
  • nie musisz walczyć z FK,
  • nie musisz usuwać tabel,
  • nie musisz ręcznie edytować SQL.