Categories: Python Полезная минутка

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

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

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

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

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

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

pip install sqlacodegen

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

sqlacodegen postgresql://user:password@localhost:5432/dbname > models.py

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

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

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

pip install alembic

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

alembic init alembic

# Или если вы работаете с БД асинхронно
alembic init -t async alembic

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

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

sqlalchemy.url = postgresql+psycopg2://user:password@localhost:5432/dbname

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

from models import Base  # путь к вашим моделям
target_metadata = Base.metadata

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

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

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

  1. Создать отдельную Alembic-директорию для каждой базы вручную
  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:

Recent Posts

  • Excel

Как правильно открыть CSV с многострочными ячейками в Excel

Если при открытие csv файла с помощью excel У все поехали ячейки - это простой… Read More

% дней назад
  • Python

Загрузка проекта на Github и Автодеплой на сервер

Простые шаги как происходит Загрузка проекта на Github и Автодеплой на сервер Сделайте работу проще! Read More

% дней назад
  • Python
  • Полезная минутка

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

Миграция базы данных - помогают с этим библиотеки SQLAlchemy и Alembic. Read More

% дней назад
  • Python

Команды Git – Шпаргалка по основным командам Git

Основные Команды Git, которые точно пригодятся. Сохрани себе шпаргалку Git Read More

% дней назад
  • Python

Установка PostgreSQL на сервер Ubuntu и подключение через pgAdmin

Установка PostgreSQL на сервер Read More

% дней назад
  • Полезная минутка

Как создать PrimaryKey для таблицы в PostgreSQL

Как создать PrimaryKey в талице базы данных SQL [РЕШЕНО] Ошибка relation tablename_id_seq doesn't exist Read More

% дней назад