在SQLalchemy中加入约会,只考虑日期而不是当天的时间

时间:2016-08-12 20:31:46

标签: python datetime sqlalchemy

我需要在datetime列上加入SQLalchemy中的两个表,但我不想考虑完整的日期时间,而只考虑它们的日期部分(即使日期的时间不相等,也要加入具有相似日期的两行)。

这是我现在所拥有的东西

import sqlalchemy as sq
...
first = meta.tables["schema.first"]
second = meta.tables["schema.second"]
select = sq.select([
    first.c.id,
    first.c.date,
    first.c.value,
    second.c.value])
    .select_from(first.join(second, sq.and_(
        first.c.id == second.c.id,
        first.c.date == second.c.date
        # exact match between datetimes is currently needed
    )))

1 个答案:

答案 0 :(得分:1)

要将时间戳截断为日精度,请使用PostgreSQL中的函数date_trunc(text, timestamp)

select = sq.select([first.c.id,
                    first.c.date,
                    first.c.value,
                    second.c.value])\
    .select_from(first.join(second, sq.and_(
        first.c.id == second.c.id,
        sq.func.date_trunc('day', first.c.date) ==
        sq.func.date_trunc('day', second.c.date)
    )))

在这种情况下,您也可以将时间戳转换为日期:

sq.cast(first.c.date, sq.Date) == sq.cast(second.c.date, sq.Date)