【问题标题】:Django models.Manager custom SQL query "more than one row returned" errorDjango models.Manager 自定义 SQL 查询“返回多行”错误
【发布时间】:2017-04-23 22:15:10
【问题描述】:

所以我试图从数据库中的列中获取 PostgreSQL 上 age() 函数的结果。

目标是添加一个新的虚拟列,其中包含自存储数据库的日期时间以来经过的年龄或时间。

我尝试通过在 Django 中创建一个 models.Manager 来添加这个新列:

class PriorityManager(models.Manager):
    def get_queryset(self):
        time_elapsed = RawSQL('SELECT EXTRACT(EPOCH FROM age(datetime)) AS age FROM backend_post',
                               params=(),
                               output_field=models.IntegerField())
    return super(PriorityManager, self).get_queryset().annotate(score=time_elapsed)

我需要一个分数列来帮助稍后对对象进行排序,并且分数是基于经过的时间。

查询 SELECT EXTRACT(EPOCH FROM age(datetime)) AS age FROM backend_post; 在 dbshel​​l 中运行,但在 Django 上运行时,出现以下消息:

ProgrammingError at /api/post/list/ 多于一行由 a 返回 用作表达式的子查询

我怀疑问题在于查询返回一整列元素,而 models.Manager 只期望一个结果。我相信应该在 RawSQL 查询中作为参数发送一些东西,但我无法弄清楚它是什么......

有人知道该怎么做吗?

非常感谢!

【问题讨论】:

    标签: sql django postgresql


    【解决方案1】:

    通过使用解决了这个问题

    http://django-postgres-stats.readthedocs.io/

    它允许使用 django 实现许多自定义 postgres 函数,这正是我所需要的。不知道为什么我花了这么长时间才找到它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多