Перейти до вмісту

Міграція бази даних у проєктах Python

Міграція бази даних у проєктах Python — один зі способів спростити роботу. У Python-проєктах, особливо під час роботи з ORM, важливо вміти працювати з міграціями в обидва боки:

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

Допомагають у цьому бібліотеки SQLAlchemy та Alembic.

🔁 1. Qlacodegen генерація моделей з наявної БД

Qlacodegen -інструмент, який зчитує структуру наявної бази даних і генерує відповідні моделі SQLAlchemy

Далі достатньо запустити простий код

де postgresql://user:password@localhost:5432/dbname – шлях до вашої БД, у цьому випадку Postgres

🔄 2. Міграції: автоматично оновлюємо БД за змінами в моделях за допомогою Alembic

Alembic – Alembic — це інструмент для роботи з міграціями в SQLAlchemy

Для початку роботи потрібно ініціалізувати Alembic у папці проєкту

У проєкті з’явиться папка alembic і файл alembic.ini

У alembic.ini вказуємо рядок підключення до БД.

У alembic/env.py додаємо підключення моделей. Де б у вас не ініціалізувався Base, обов’язково імпортуйте його з файлу, де розташовані моделі (інакше alembic не побачить моделі й міграція не вийде)

Тепер, щоб оновити БД після змін у моделях, достатньо запустити

Alembic Alembic порівняє Base.metadata і структуру БД, створить потрібний скрипт і застосує його.

🧩 Підсумок

Напрям Інструмент Команда
БД → моделі sqlacodegen sqlacodegen URI --outfile=models.py
Моделі → БД alembic + metadata alembic revision --autogenerate, потім alembic upgrade head

❗ Щоб працювати з кількома базами даних, потрібно:

  1. Створити окрему Alembic-директорію для кожної бази вручну
  2. Ініціалізувати кожну окремо з різною назвою

Приклад

Це створить дві незалежні папки alembic_admin/ та alembic_user/, кожна зі своїм alembic.ini.

Потім треба відредагувати кожен alembic.ini:

  • alembic_admin.ini → рядок підключення до першої БД
  • alembic_user.ini → рядок підключення до другої БД
Больше статей:   Завантаження проєкту на GitHub і автодеплой на сервер

І в env.py кожної директорії налаштовуєте свій target_metadata:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *