Как исправить путаницу во времени в базе Postgres?

У меня есть модель с такими полями:

class PayRequest(Base):
    __tablename__ = 'request'

    created: Mapped[DateTime] = mapped_column(DateTime(timezone=True),
                                              default=get_moscow_time())
    updated: Mapped[DateTime] = mapped_column(DateTime(timezone=True),
                                              default=get_moscow_time(),
                                              onupdate=get_moscow_time())

Есть функция, которая возвращает московское время:
from datetime import datetime as dttm
import pytz

def get_moscow_time():

    moscow = pytz.timezone('Europe/Moscow')
    return dttm.now(moscow)


Если записать такой объект в базу, то время записывается странным образом:
async def orm_add_pay_request(
                              session: AsyncSession,
                              bank: str,
                              amount: float,
                              card_id: int,
                              user_id: int):
    pay_request = PayRequest(
        bank=bank,
        amount=amount,
        card_id=card_id,
        user_id=user_id
    )
    session.add(pay_request)
    await session.commit()
    return pay_request

payment = orm_add_pay_request(session, 'test', 1, 2 ,3)
print(payment.created, payment.updated)

2024-07-19 03:29:18.520629+00:00 2024-07-19 06:29:18.520692+03:00

Я также вношу пару тестовых изменений.
Поле created выводится по utc, а updated по Москве.
В чем может быть проблема?
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
@Everything_is_bad
Ты понимаешь разницу между default=get_moscow_time() и default=get_moscow_time, с onupdate аналогично.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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