在我的应用程序中,我在 PostgreSQL 数据库上创建了一个视图,并将该视图映射到 Django 中的一个非托管模型。
出于某种原因,当我在 Django 中查询此模型时,其中一个元组返回了不正确的结果。
这是我的创建视图代码:
CREATE VIEW test_view_a AS
SELECT ROW_NUMBER() OVER (ORDER BY account_id, person_id)::int AS id,
AVG(EXTRACT(epoch FROM date_trunc('second', meeting_time)))::int AS avg_meeting_time,
AVG(EXTRACT(epoch FROM date_trunc('second', office_time)))::int AS avg_office_time,
AVG(EXTRACT(epoch FROM date_trunc('second', traffic_time)))::int AS avg_traffic_time,
account_id,
person_id
FROM test_view_b
GROUP BY account_id, person_id
ORDER BY account_id, person_id;
这是我直接在数据库中查询时返回的数据:
id | avg_meeting_time | avg_office_time | avg_traffic_time | account_id | person_id
----+------------------+-----------------+------------------+------------+-----------
1 | 64800 | 0 | 1514 | 1 | 8
2 | 14400 | 0 | 29290 | 3 | 9
3 | 14400 | 0 | 0 | 3 | 10
(3 rows)
当我通过 Django 查询此视图时,第二行和第三行正确返回,但第一行返回的 avg_meeting_time 为 -1144800,avg_traffic_time 为 1202400:
>>> from test.models import *
>>> queryset = ViewA.objects.all()
>>> '%i %i' % (queryset[0].avg_meeting_time, queryset[0].avg_traffic_time)
'-1144800 1202400'
我曾尝试通过 django.db.connection 对象直接查询此视图,甚至尝试执行以这种方式生成视图的查询。结果总是相同的,与数据库上的不同。
如果这很重要,我正在使用带有 PostGIS 的空间数据库。我曾尝试将后端切换到 psycopg2,但得到了相同的结果。
这是怎么回事?