HarisNvr
@HarisNvr
Начинающий кодер Python

Как работают миграции в SQLAlchemy 2.0?

Есть две таблицы для ТГ бота, описаны через SQLAlchemy 2.0.31:

...
DB_USER = getenv('POSTGRES_USER')
DB_PASS = getenv('POSTGRES_PASSWORD')
DB_NAME = getenv('POSTGRES_DB')
DB_HOST = getenv('DB_HOST')

DATABASE_URL = f'postgresql+psycopg2://{DB_USER}:{DB_PASS}@{DB_HOST}/{DB_NAME}'

engine = create_engine(DATABASE_URL, echo=True)


class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = 'Users'

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    chat_id: Mapped[int] = mapped_column(unique=True)
    username: Mapped[str] = mapped_column(String(32))
    last_tarot_date: Mapped[str] = mapped_column(String(20))

    messages = relationship('Message', back_populates='user')


class Message(Base):
    __tablename__ = 'Message_ids'

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    chat_id: Mapped[int] = mapped_column(ForeignKey('Users.id'))
    message_id: Mapped[int] = mapped_column()
    date_added: Mapped[str] = mapped_column(String(20))

    user = relationship('User', back_populates='messages')


Вопрос такой - когда мы деплоим бота, как правильно создавать миграции?

Как вариант:
Base.metadata.create_all(engine)
но может есть что-то по типу manage.py migrate как у Джанго? Чтобы не через код всё это делать, а через консоль.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@Everything_is_bad
В SQLAlchemy нет миграций, create_all это создание таблиц с нуля, обычно это требуется очень редко. Да и вообще, DDL запросы сами по себе очень редко вызываются внутри рабочего сервиса, это обычно делается извне. А для миграций используют отдельную библиотеку Alembic.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 100 000 ₽
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект