В прошлой статье, я создал некий проект для демонстрации работы с базой данных postgresql:
Осталось доделать миграции и можно отправлять работу на проверку. Итак, что же нужно сделать в данной работе:
1. Подключите к проекту Alembic.
2. Создайте init-миграцию и накатите её.
3. Создайте и накатите миграцию по удалению атрибута user.has_sale.
4. Откатите миграцию из п. 3.
5. Создайте и накатите миграцию по добавлению атрибута user.surname.
6. Сделайте имитацию конфликтной ситуации: создайте миграцию по добавлению user.patronomic, в атрибуте down_revision укажите миграцию из п. 2.
7. Накатите миграцию из п. 6 и решите конфликт.
1 и 2. Подключите к проекту Alembic. Создайте init-миграцию и накатите её.
Прежде чем выполнить команду alembic init migrations я дважды проверил что нахожусь в том каталоге что надо, а именно, там где мой проект. Ну а х.з всегда может пойти что-то не так!
Должна появиться директория migrations и файлик alembic.ini
Файл README можно сразу отправить в "цифровой рай" (корзину), просто чтоб не мешался.
Настраиваем файл alembic.ini
А так же env.py:
Пришлось повозиться с импортом Base, все скатывалось на ошибку что алембик не может найти этот Base:
Пробовал различные варианты, и полный путь и маркировать директории и точки в разные места ставить. Оказалось так как мой проект в той же директории что и alembic.ini - никаких особых путей указывать не надо, просто:
from models import Base
После чего все миграции прошли успешно и в папке migrations/versions появился файл первой миграции:
Накатываем миграции...
Наверное можно считать что 1 и 2 задания выполнены, переходим к 3.
3 и 4. Создайте и накатите миграцию по удалению атрибута user.has_sale. После чего откатить эту же миграцию.
То есть нужно удалить поле has_sale и сделать миграцию?! Пробую...
По идее, после того как я накачу данную миграцию, столбец "has_sale" должен исчезнуть из таблицы users:
Да, так и есть колонка удалена:
Теперь нужно откатить все изменения назад, на одну ступень, можно это сделать командой alembic downgrade head
И ничего не произошло, в логах нет строчки Running downgrade, нужно указывать ревизию до которой необходимо откатиться:
Столбец has_sale снова появился, только теперь он пуст:
5.Создайте и накатите миграцию по добавлению атрибута user.surname.
6 и 7 Сделайте имитацию конфликтной ситуации: создайте миграцию по добавлению user.patronomic, в атрибуте down_revision укажите миграцию из самой первой миграции
При попытке накатить спорную миграцию выскочила ошибка, хотя при генерации файла миграции все было норм:
При помощи alembic merge разрешаем спорную ситуацию и повторяем накат:
Ну вот, вроде бы все задания выполнены, можно и на проверку отправить...