Skip to content

Миграция базы данных в проектах Python

Миграция Базы данных в проектах Python – это один их способов сделать работу проще. В Python-проектах, особенно при работе с ORM, важно уметь работать с миграциями в обе стороны:

  1. Генерирация моделей из существующей базы данных (Если она уже были создана в базе данных)
  2. Обновление базу данных при изменениях в моделях

Помогают с этим библиотеки SQLAlchemy и Alembic.

🔁 1. Qlacodegen генерация моделей из существующей БД

Qlacodegen -инструмент, который считывает структуру существующей базы данных и генерирует соответствующую модель SQLAlchemy

Дальше просто запустить простой код

где postgresql://user:password@localhost:5432/dbname – путь к вашей БД, в данном случае Postgres

🔄 2. Миграции: атоматически обновляем БД по изменениям в моделях с помощью Alembic

Alembic – это инстумент для работы с миграциями для SQLAlchemy

Для начала работы нужно инициализировать Alembic в папке проекта

У вас в проекта появится папка alembic и файд alembic.ini

В alembic.ini указываем строку подключения к БД.

В alembic/env.py добавляем подключение моделей. Где бы не инициалищировался у ва Base добавляйте его обязетельно с файла, где расположены модели (иначе alembic не увидит модели и миграция не получится)

Теперь для обновления БД, если Вы что-то изменили в моделях, достаточно запустить

Alembic сравнит Base.metadata и структуру БД, создаст нужный скрипт и применит его.

🧩 Итого

НаправлениеИнструментКоманда
БД → моделиsqlacodegensqlacodegen URI --outfile=models.py
Модели → БДalembic + metadataalembic revision --autogenerate, затем alembic upgrade head

❗ Чтобы работать с несколькими базами данных, тебе нужно:

  1. Создать отдельную Alembic-директорию для каждой базы вручную
  2. Инициализировать каждую по отдельности с разным названием

Пример

Это создаст две независимые папки alembic_admin/ и alembic_user/, каждая со своей alembic.ini.

Потом нужно править каждый alembic.ini:

  • alembic_admin.ini → строка подключения к первой БД
  • alembic_user.ini → строка подключения ко второй БД

И в env.py каждой директории настраиваешь свой target_metadata:

Leave a Reply

Your email address will not be published. Required fields are marked *