【发布时间】: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; 在 dbshell 中运行,但在 Django 上运行时,出现以下消息:
ProgrammingError at /api/post/list/ 多于一行由 a 返回 用作表达式的子查询
我怀疑问题在于查询返回一整列元素,而 models.Manager 只期望一个结果。我相信应该在 RawSQL 查询中作为参数发送一些东西,但我无法弄清楚它是什么......
有人知道该怎么做吗?
非常感谢!
【问题讨论】:
标签: sql django postgresql