Всех приветствую Камрады! Довольно часто сейчас приходиться что-то программировать на python, а точнее г**нокодить и вот познакомился я с чудесной библиотекой SQLAlchemy – это Python-библиотека, которая позволяет работать с реляционными базами данных с помощью ORM, а Alembic – это инструмент для работы с миграциями для SQLAlchemy.
Что такое миграции?
Основная идея миграции заключается в программном применении изменений в базе данных. Инструменты миграции создают артефакты, которые проверяют структуру базы данных с помощью исходного кода и последовательно запускают ее для применения изменений.
Миграция базы данных использует ту же идею, что и системы контроля версий, для создания истории изменений в структуре базы данных, предоставляя возможность применять и отменять эти изменения.
То есть в любой момент мы можем откатить либо добавить нам то что нужно.
Для начала установим их через pip
pip install psycopg2-binary sqlalchemy alembic
import datetime
from sqlite3 import Date
from sqlalchemy import BigInteger, Column, DateTime, Float, ForeignKey, Integer, String, Table, create_engine, insert, select,update, text, Connection, MetaData
from sqlalchemy.orm import registry,Mapped,sessionmaker, declarative_base,relationship,as_declarative,Session,DeclarativeBase, mapped_column, session
engine = create_engine("postgresql+psycopg2://test:test@localhost/test", echo=True)
class Base(DeclarativeBase): pass
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, index=True)
fullname = Column(String)
id_telegram = Column(BigInteger)
date = Column(DateTime,nullable=False)
# Base.metadata.create_all(bind=engine)
with Session(autoflush=False, bind=engine) as session:
current_datetime = datetime.datetime.now()
user = Users(fullname='Nik Pidorasovich',id_telegram=15623123 ,date=current_datetime)
session.add(user)
session.commit()
print(user.id)
print(current_datetime)
Создаем файл main.py с таким содержанием, объяснения я думаю излишнее
Для работы Alembic требуется несколько файлов. Чтобы инициализировать Alembic для вашего проекта, введите команду ниже:
alembic init migrations
Нам требуются два файла всего это alembic.ini и env.py
Для начала добавим подключение к базе данных в файле alembic.ini
sqlalchemy.url = postgresql+psycopg2://test:test@localhost/test
Дальше иде в migrations/env.py добавляем там нашу модель
target_metadata = Base.metadata
Автогенерация миграций
Теперь мы готовы настроить нашу первую миграцию. Используйте рекомендации ниже для автоматического создания первоначальных миграций:
alembic revision --autogenerate -m "Create migrations"
После выполнения у нас появиться миграция в vresions, конечно у меня их прям много но у вас он будет один )
После создания миграции мы можем выполнить миграцию в базе данных, запустив команду
alembic upgrade head
Теперь в нашей базе данных появилась наша созданная таблица
Полезные команды
- Отображение текущей версии базы данных:
alembic current
. - Просмотр истории миграций:
alembic history --verbose
. - Отменить все миграции:
alembic downgrade base
. - Отмените миграцию одну за другой:
alembic downgrade -1
. - Примените все миграции:
alembic upgrade head
. - Примените миграции одну за другой:
alembic upgrade +1
. - Отобразить весь необработанный SQL:
alembic upgrade head --sql
. - Сброс базы данных:
alembic downgrade base && alembic upgrade head
.
Как добавить или удалить колонку
Вот кстати довольно интересный вопрос и довольно интересное решение в alembic, нам нужно зайти в нашу миграцию
И в функции upgrade написать
op.add_column('users', sa.Column('date',sa.DateTime(),nullable=True ))
Немного проясню users наша таблица в которую мы хотим добавить колонку date колонку которую мы хоти добавить, дальше в водим команду
alembic upgrade f5cf8b9fbc37
И теперь у нас в базе данных появилась колонка date, с удаление принцип похож только мы добавляем в функцию downgrade
op.drop_column('users', 'fullname')
Вот и все )
Оставьте первый коментарий