Задать вопрос
HarisNvr
@HarisNvr
Начинающий кодер Python

Как в SQLAlchemy 2 указать время записи в БД как МСК а не UTC?

Есть ОРМ для телеграмм бота, на данный момент время отправки сообщения записывается как UTC. Где-то прочитал, что Postgre пишет только в UTC, но в Django мне удавалось перенастроить его на МСК. Как можно перенастроить Алхимию на МСК?

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))
    user_first_name: Mapped[str] = mapped_column(String(32))
    last_tarot_date: Mapped[datetime] = mapped_column(
        DateTime,
        nullable=True,
        default=None
    )
    is_subscribed: Mapped[bool] = mapped_column(
        Boolean,
        nullable=True,
        default=None
    )

    messages = relationship(
        'Message',
        back_populates='user',
        cascade='all, delete-orphan'
    )


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[datetime] = mapped_column(
        DateTime,
        default=datetime.now
    )

    user = relationship('User', back_populates='messages')
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
HarisNvr
@HarisNvr Автор вопроса
Начинающий кодер Python
Короче сделал вместо DateTime тип данных TIMESTAMP и всё заработало:

last_tarot_date: Mapped[datetime] = mapped_column(
        TIMESTAMP(timezone=True),
        nullable=True,
        default=None,
    )

...

message_date: Mapped[datetime] = mapped_column(
        TIMESTAMP(timezone=True),
        default=datetime.now,
        nullable=False,
    )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Где-то прочитал, что Postgre пишет только в UTC,
нет, postgresql умеет таймзоны

но в Django мне удавалось перенастроить его на МСК
при чем тут Django? да, там на уровне settings можно указать кучу вариантов работы с datetime, это это вообще никак ни к SQLAlchemy, ни к postgresql не относится

Как можно перенастроить Алхимию на МСК?
явно передавать datetime c timezone MSK
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы