我为我的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没有收到这个结果?
答案 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