Миграция Базы данных в проектах Python – это один их способов сделать работу проще. В Python-проектах, особенно при работе с ORM, важно уметь работать с миграциями в обе стороны:
- Генерирация моделей из существующей базы данных (Если она уже были создана в базе данных)
- Обновление базу данных при изменениях в моделях
Помогают с этим библиотеки SQLAlchemy и Alembic.
🔁 1. Qlacodegen генерация моделей из существующей БД
Qlacodegen -инструмент, который считывает структуру существующей базы данных и генерирует соответствующую модель SQLAlchemy
1 | pip install sqlacodegen |
Дальше просто запустить простой код
1 | sqlacodegen postgresql://user:password@localhost:5432/dbname > models.py |
где postgresql://user:password@localhost:5432/dbname – путь к вашей БД, в данном случае Postgres
🔄 2. Миграции: атоматически обновляем БД по изменениям в моделях с помощью Alembic
Alembic – это инстумент для работы с миграциями для SQLAlchemy
1 | pip install alembic |
Для начала работы нужно инициализировать Alembic в папке проекта
1 2 3 4 | alembic init alembic # Или если вы работаете с БД асинхронно alembic init -t async alembic |
У вас в проекта появится папка alembic и файд alembic.ini
В alembic.ini указываем строку подключения к БД.
1 | sqlalchemy.url = postgresql+psycopg2://user:password@localhost:5432/dbname |
В alembic/env.py добавляем подключение моделей. Где бы не инициалищировался у ва Base добавляйте его обязетельно с файла, где расположены модели (иначе alembic не увидит модели и миграция не получится)
1 2 | from models import Base # путь к вашим моделям target_metadata = Base.metadata |
Теперь для обновления БД, если Вы что-то изменили в моделях, достаточно запустить
1 2 | alembic revision --autogenerate -m "Added new fields" alembic upgrade head |
Alembic сравнит Base.metadata и структуру БД, создаст нужный скрипт и применит его.
🧩 Итого
| Направление | Инструмент | Команда |
|---|---|---|
| БД → модели | sqlacodegen | sqlacodegen URI --outfile=models.py |
| Модели → БД | alembic + metadata | alembic revision --autogenerate, затем alembic upgrade head |
❗ Чтобы работать с несколькими базами данных, тебе нужно:
- Создать отдельную Alembic-директорию для каждой базы вручную
- Инициализировать каждую по отдельности с разным названием
Пример
1 2 | alembic init alembic_admin alembic init alembic_user |
Это создаст две независимые папки alembic_admin/ и alembic_user/, каждая со своей alembic.ini.
Потом нужно править каждый alembic.ini:
alembic_admin.ini→ строка подключения к первой БДalembic_user.ini→ строка подключения ко второй БД
И в env.py каждой директории настраиваешь свой target_metadata: