Найти в Дзене
Заходи в Ай-Ти

FastAPI - создание web-приложения. Часть 5 (Alembic и миграции баз данных)

Как и GIT, Alembic — Доктор Стрэнж для базы данных. Допустим, мы добавляем столбец с названием «цена» в таблицу продуктов и его тип данных — integer. Через несколько дней очень умный разработчик изменил тип данных на float. Если мы хотим изменить тип данных обратно на десятичный для большей точности, нам нужно будет написать оператор ALTER и выполнить его на сервере. Это очень простой пример, однако изменения в базе данных могут быть масштабными. Дела могут пойти совсем плохо, если мы выполним хотя бы один неверный оператор ALTER.

Alembic что за зверь такой?
Alembic что за зверь такой?

Чтобы упростить задачу, мы можем использовать Alembic для управления миграциями за нас. Давайте начнем с него. Измените файл requirements.txt , чтобы он содержал информацию о версии новой библиотеки:

alembic==1.11.1

Затем выполним знакомую команду pip install -r require.txt. После установки Alembic мы можем перейти в корневую папку, где находится файл main.py, и выполнить alembic init alembic.

algoholic.io/
└─core/
└─db/
└─requirements.txt
└─main.py

Это приведет к созданию нового файла с именем alembic.ini и каталога с именем alembic. Сейчас есть два подхода:

  • Первый . Единственное, что мы хотим отредактировать в файле alembic.ini , это sqlalchemy.url. Для меня его значение будет следующим: postgresql://nofoobar:supersecret@localhost:5432/blogdb,  где nofoobar — это имя пользователя базы данных, supersecret — это пароль, а blogdb — имя базы данных. Но это небезопасно, поскольку мы зафиксируем файл alembic.ini, и URL-адрес нашей базы данных будет виден всему миру! Так делать плохо и тру прогаммисты вас за такое забулят! Мы же не хоти этого. Поэтому есть второй способ
  • Второй подход: мы можем установить URL-адрес в файле env.py более безопасным способом. Файл env.py находится внутри каталога alembic. В файле env.py импортируйте Base из db/base.py и установите целевые метаданные.
Обновленный файл env.py
Обновленный файл env.py

Я собираюсь создать новый файл с именем db/base.py , чтобы отслеживать все наши будущие модели sqlalchemy. На данный момент это было бы так же просто, как:

from db.base_class import Base

Поскольку на данный момент у нас нет никаких моделей, alembic будет создавать пустые файлы миграции при выполнении: alembic revision --autogenerate -m "first commit". Вы можете найти сгенерированный файл в alembic/versions/

Думаю, для понимаю этих заний достаточно. В дальнейшем мы более подробно погрузимся в детали)

✅ В следующей статье мы создадим таблицы в базе данных и попробуем поработать с ней

Читайте также: Часть 6 (Создание таблиц)

.

❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал (Заходи в Ай-Ти).

👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!

#fastapi #fastapi python #fastapi docker #питон разработчик #backend python курс #обучение python бесплатно