Ответ
Для управления версиями схемы базы данных в проектах на SQLAlchemy используется библиотека Alembic. Это стандартный инструмент для миграций, созданный авторами SQLAlchemy.
Alembic позволяет отслеживать изменения в моделях и генерировать скрипты для последовательного обновления структуры БД, что критически важно для командной разработки и развертывания приложений.
Основной процесс работы
-
Установка:
pip install alembic -
Инициализация репозитория миграций (выполняется в корне проекта):
alembic init alembicЭта команда создаст директорию
alembicс конфигурационными файлами. -
Настройка подключения к БД. В файле
alembic.iniнужно указать URL для подключения к базе данных:sqlalchemy.url = postgresql://user:password@localhost/dbnameВ файле
alembic/env.pyнеобходимо указать Alembic, где искать метаданные ваших моделей, чтобы он мог автоматически определять изменения:# alembic/env.py from myapp.models import Base # Импортируем базовый класс моделей target_metadata = Base.metadata -
Создание новой миграции. Alembic сравнивает текущее состояние моделей с состоянием в БД и генерирует скрипт миграции:
alembic revision --autogenerate -m "Add user table" -
Применение миграции к БД:
alembic upgrade headКоманда
headозначает применение всех миграций до последней версии.
Ключевые команды
alembic current: Показать текущую версию миграции в БД.alembic history: Показать историю всех миграций.alembic downgrade -1: Откатить последнюю примененную миграцию.
Примечание: Для фреймворка Flask существует удобная обертка
Flask-Migrate, которая интегрирует Alembic в жизненный цикл Flask-приложения.
Ответ 18+ 🔞
А, ну это ж про Алембик, блядь! Библиотека такая, Alembic, ёпта. Ну, это типа официальный костыль от самих создателей SQLAlchemy, чтобы твою схему базы данных не разъебало в хлам при каждом чихе. Без него — пиши пропало, особенно если в команде работаешь или на продакшен выкатываешь.
Как с этим говном работать, по шагам
-
Ставим, естественно.
pip install alembicБез этого нихуя не начнётся.
-
Инициализируем репозиторий для миграций. Тыкаешь в корне проекта:
alembic init alembicОн нагенерит папку
alembicс кучей файлов. Не пугайся, это нормально. -
Настройка подключения, блядь. Это важно, а то он будет в пустоту пытаться лезть. В файле
allembic.iniищешь строчку сsqlalchemy.urlи пишешь туда свою строку подключения, как для SQLAlchemy:sqlalchemy.url = postgresql://user:password@localhost/dbnameА потом, внимание, ёбаный в рот, в файле
alembic/env.pyнадо ему показать, где твои модели живут. Ищешь тамtarget_metadataи делаешь так:# alembic/env.py from myapp.models import Base # Импортируешь свой базовый класс, от которого все модели наследуются target_metadata = Base.metadataТеперь он будет видеть, что ты там в моделях намудрил.
-
Создание миграции. Вот тут магия начинается. Ты меняешь свои модели (добавил колонку, таблицу новую), а потом говоришь Алембику:
alembic revision --autogenerate -m "Add user table"Он посмотрит на твои модели, посмотрит на базу, офигеет от различий и нагенерит скрипт миграции в папке
alembic/versions. В сообщении-mпиши человеческое описание, а то потом сам не вспомнишь, что за хуйню ты там накодил. -
Применить миграцию. Сгенерировал — теперь надо это добро в базу запихнуть:
alembic upgrade headhead— это типа «всё до последней версии». Если всё прошло без пиздеца, схема базы обновилась. Красота!
Ещё пара команд, чтобы не потеряться
alembic current— покажет, на какой версии миграции сейчас висит твоя база. Полезно, когда подозрение ебать чувствуешь, что что-то не так.alembic history— покажет всю историю миграций, как они шли. Типа лента времени, только про SQL.alembic downgrade -1— ОПАСНАЯ КНОПКА, блядь! Откатывает последнюю применённую миграцию. Пользуй с умом, а то можно всё проебать.
Важный момент, нахуй: Если ты на Flask сидишь, есть обёрточка
Flask-Migrate. Она эту всю алембичью хуйню в твоё Flask-приложение интегрирует, чтобы не пришлось руками в консоли ебаться. Очень удобная штука, рекомендую.