SQLAlchemy:两个日期之间的差异

Jua*_*rez 5 python postgresql sqlalchemy

我想知道在 SQLAlchemy 上工作的两个日期之间的差异。使用 Postgresql 我有以下工作:

SELECT
    EXTRACT(EPOCH FROM ('2019-02-11 17:59:05.953894'::timestamp - '2019-02-11 17:59:01.953894'::timestamp))
Run Code Online (Sandbox Code Playgroud)

但是,在 SQLAlchemy 中尝试相同的操作时我遇到了问题:

session.query(func.extract('epoch',func.date(subquery.c.dt_final.cast(Date)))-
                                   func.date(subquery.c.dt_start.cast(Date))).all()
Run Code Online (Sandbox Code Playgroud)

出现此错误:

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.
Run Code Online (Sandbox Code Playgroud)

如何在 SQLAlchemy 中获取两个日期之间的差异的正确方法?

谢谢

小智 5

您可以使用 datediff 来计算日期差异:

SELECT  DATEDIFF(Here_you_put_units, '2019-02-11 17:59:05.953894', '2019-02-11 17:59:01.953894');
Run Code Online (Sandbox Code Playgroud)

您可以使用的单位:

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
Run Code Online (Sandbox Code Playgroud)

保存为 var:

 SELECT  DATEDIFF(Here_you_put_units, '2019-02-11 17:59:05.953894', '2019-02-11 17:59:01.953894') AS needed_date;
Run Code Online (Sandbox Code Playgroud)

SQL_炼金术:

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)
Run Code Online (Sandbox Code Playgroud)


小智 0

您可能需要从时间戳切换到日期时间,但有一个名为 timediff() 的内置函数,其工作方式与 count() 和 max() 类似。我对 SQLalchemy 不熟悉,但它应该非常通用。