SQLAlchemy: разница между двумя датами - PullRequest
0 голосов
/ 04 марта 2020

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

SELECT
    EXTRACT(EPOCH FROM ('2019-02-11 17:59:05.953894'::timestamp - '2019-02-11 17:59:01.953894'::timestamp))

Однако у меня возникают проблемы при попытке выполнить то же самое в SQLAlchemy:

session.query(func.extract('epoch',func.date(subquery.c.dt_final.cast(Date)))-
                                   func.date(subquery.c.dt_start.cast(Date))).all()

Получение этой ошибки:

ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: double precision - date
LINE 1: ...h FROM date(CAST(anon_2.dt_final AS DATE))) - date(CAS...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

Как правильно получить разницу между двумя датами в SQLAlchemy?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Вы можете использовать datediff для разностей дат:

SELECT  DATEDIFF(Here_you_put_units, '2019-02-11 17:59:05.953894', '2019-02-11 17:59:01.953894');

единиц, которые вы можете использовать:

year    yy, yyyy
quarter qq, q
month   mm, m
dayofyear   dy, y
day dd, d
week    wk, ww
hour    hh
minute  mi, n
second  ss, s
millisecond ms
microsecond mcs
nanosecond  ns

Сохранить как переменную:

 SELECT  DATEDIFF(Here_you_put_units, '2019-02-11 17:59:05.953894', '2019-02-11 17:59:01.953894') AS needed_date;

SQL_alchemy:

from sqlalchemy import func, text
from datetime import datetime
date1 = datetime.fromisoformat('2019-02-11 17:59:05.953894')
date2 = datetime.fromisoformat('2019-02-11 17:59:01.953894')
func.datediff(text('Here_you_put_units'), date1, date2)
0 голосов
/ 04 марта 2020

Вам может потребоваться переключиться с меток времени на дату и время, но есть встроенная функция timediff (), которая работает аналогично таким вещам, как count () и max (). Я не знаком с SQLalchemy, но он должен быть довольно универсальным.

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