【发布时间】:2019-03-04 15:55:38
【问题描述】:
我正在使用 django.db.connection 在我的 PostgreSQL 数据库和 Django 中运行查询。但由于某种原因,我在 Django 中的查询会产生完全不同的结果。这是我的查询及其相应的结果。
PostgreSQL 中的查询
WITH calendar AS
( SELECT d
FROM generate_series(date_trunc('day', CURRENT_DATE - INTERVAL '6 day'), CURRENT_DATE, '1 day'::interval) d)
SELECT n.device_name AS dev_name,
c.d::date AS dev_date,
COUNT(mc.id)
FROM
(SELECT DISTINCT device_name
FROM machine_counter) n
CROSS JOIN calendar c
LEFT JOIN machine_counter mc ON mc.device_datetime >= c.d + INTERVAL '7 hour'
AND mc.device_datetime < c.d + INTERVAL '1 day 7 hour'
AND n.device_name = mc.device_name
GROUP BY n.device_name,
c.d
ORDER BY c.d,
n.device_name;
views.py
def getMachineCount(request):
cursor = connection.cursor()
cursor.execute(
'''
WITH calendar AS
( SELECT d
FROM generate_series(date_trunc('day', CURRENT_DATE - INTERVAL '6 day'), CURRENT_DATE, '1 day'::interval) d)
SELECT n.device_name AS dev_name,
c.d::date AS dev_date,
COUNT(mc.id)
FROM
(SELECT DISTINCT device_name
FROM machine_counter) n
CROSS JOIN calendar c
LEFT JOIN machine_counter mc ON mc.device_datetime >= c.d + INTERVAL '7 hour'
AND mc.device_datetime < c.d + INTERVAL '1 day 7 hour'
AND n.device_name = mc.device_name
GROUP BY n.device_name,
c.d
ORDER BY c.d,
n.device_name;
'''
)
records = cursor.fetchall()
col_list = [desc[0] for desc in cursor.description]
print(records)
result = bindQueryColumnDescription(records, col_list)
return HttpResponse(json.dumps(result, default=dateConverter))
【问题讨论】:
-
在数据库服务器上记录查询,看看您是否真的在运行相同的两个查询。看起来您可能没有连接到同一个实例。通过比较来自控制台和 Django 的
select CURRENT_DATE;,我会简化/排除一些事情。
标签: python sql django postgresql count