Расхождения при вычитании дат с отметкой времени в SQLAlchemy и Postgresql - PullRequest
0 голосов
/ 11 марта 2020

У меня есть некоторые расхождения при вычитании дат в Postgresql и SQLAlchemy. Например, у меня есть следующее в Postgresql:

SELECT trunc(EXTRACT(EPOCH FROM ('2019-07-05 15:20:10.111497-07:00'::timestamp - '2019-07-04 11:45:17.293328-07:00'::timestamp)))

--99292

и следующий запрос в SQLAlchemy:

date_diff = session.query(func.trunc((func.extract('epoch',
                                                    func.date('2019-07-05 15:20:10.111497-07:00'))-
                                      func.extract('epoch',
                                                    func.date('2019-07-04 11:45:17.293328-07:00'))))).all()
print(date_diff)

#[(86400.0,)]

Мы видим, что самая точная разница исходит от Postgresql запрос. Как я могу получить тот же результат, используя SQLAlchemy? Я не смог определить причину этой разницы. Если вы знаете, пожалуйста, дайте мне знать.

Большое спасибо.

1 Ответ

1 голос
/ 11 марта 2020

Никогда ранее не использовал SQLAlchemy, но похоже, что вы пытаетесь усечь дату вместо timestamp или datetime

Не беспокойтесь, это простая ошибка, которую можно сделать. Библиотеки DateTime могут путать с их определениями (дата буквально является датой, поэтому ГГГГ-ММ-ДД, тогда как отметка времени включает в себя как дату, так и время для некоторого номинала)

Вот почему у вас разница в 86 400 (один день), потому что он сравнивает даты двух объектов (2019-07-05 - 2019-07-04)

Попробуйте использовать func.time.as_utc() или что-то подобное, чтобы получить метку времени

Вы хотите сравнить ВЕСЬ отметку времени

РЕДАКТИРОВАТЬ: Извините, не видел ваш комментарий до публикации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...