【问题标题】:How can get last nth item of a query on PostgreSql如何在 PostgreSql 上获取查询的最后第 n 项
【发布时间】:2019-11-21 19:02:32
【问题描述】:

问题:

如何在Database 级别获取查询的最后 750 条记录?

这是我尝试过的:

# Get last 750 applications

apps = MyModel.active_objects.filter(
    **query_params
).order_by('-created_at').values_list('id', flat=True)[:750]

此查询获取所有命中 query_params 过滤器的记录,然后返回最后 750 条记录。所以我想在database 级别做这项工作,比如mongoDb 聚合查询。有可能吗?

谢谢。

【问题讨论】:

  • 正在在数据库级别进行。它获取所有记录。

标签: python django python-3.x postgresql django-models


【解决方案1】:

实际上这不是 Django 的工作方式。限制部分也在数据库级别完成。

Django docs - Limiting QuerySets

通常,对 QuerySet 进行切片会返回一个新的 QuerySet——它不会评估查询。

要查看数据库中实际运行的查询,您可以像这样简单地打印查询:

apps = MyModel.active_objects.filter(
           **query_params
       ).order_by('-created_at').values_list('id', flat=True)[:750]
print(apps.query)

结果会是这样的:

SELECT * FROM "app_mymodel" WHERE <...> ORDER BY "app_mymodel"."created_at" DESC LIMIT 750

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 2019-02-07
  • 2020-12-08
  • 2013-12-31
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多