3

在我的应用程序中,我在 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,但得到了相同的结果。

这是怎么回事?

4

2 回答 2

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

并同意 Burhan Khalid - 模型将很有用

于 2012-07-07T17:38:32.197 回答
0

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

TIME_ZONE = '美国/芝加哥'

于 2014-01-13T10:34:09.467 回答