Django原始sql与datetime

时间:2017-09-05 12:08:51

标签: sql django postgresql

我为我的django项目使用postgres,对于db的复杂查询我使用connection.cursor()。今天我在filter中使用datetime进行原始sql查询时出现问题:

    with connection.cursor() as cursor:

        cursor.execute(
            "SELECT * from orders_orderstatus WHERE datetime > '2017-09-05 16:07:16'"
        )
        row = [item[0] for item in cursor.fetchall()]
    return row

结果我们有空列表。但是如果我从psql控制台查询这个,我看到结果不是空的:

SELECT * FROM orders_orderstatus WHERE datetime > '2017-09-05 16:07:16';

id  |       status       |           datetime            
----+--------------------+-------------------------------+
256 | created    | 2017-09-05 16:10:59.602091+07
257 | delivered  | 2017-09-05 16:11:00.834547+07 
258 | created    | 2017-09-05 16:11:03.499364+07 

为什么django没有收到这个结果?

1 个答案:

答案 0 :(得分:2)

这是显示你的python和psql如何解释datetime的字符串tzinfo。

psql使用您的字符串时间作为UTC。 python使用+ hours_of_your_time_zone

将其发送到db

如果你的tz +07那么试试python:

with connection.cursor() as cursor:

    cursor.execute(
        "SELECT * from orders_orderstatus WHERE datetime > '2017-09-05 09:07:16'"
    )
    row = [item[0] for item in cursor.fetchall()]
return row

将来尝试使用tz。

的datetime对象

看起来你已经设置了:

USE_TZ=True