2012-07-06 146 views
3

在我的应用程序中,我创建了PostgreSQL数据库的视图,并将该视图映射到Django中的非托管模型。Django + PostgreSQL:查询返回不正确的结果

出于某种原因,当我在Django中查询这个模型时,其中一个元组返回的结果不正确。

这是我的CREATE VIEW代码:

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,但得到了相同的结果。

这是怎么回事?

+0

您可以发布正在使用的模式? – 2012-07-07 01:06:23

回答

1

尝试调试您

>>> from test.models import * 
>>> queryset = ViewA.objects.all() 
>>> '%i %i' % (queryset[0].avg_meeting_time, queryset[0].avg_traffic_time) 

from django.db import connection 
connection.queries 

并与布尔汗哈立德同意 - 模式将是有益的

0

你应该检查你的settings.py你有正确的语言环境?

TIME_ZONE =“美国/芝加哥”