2012-07-06 151 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 =「美國/芝加哥」