跳转到主要内容

启用SQL窗口函数,以便在Django查询中使用。为您的查询添加排名。

项目描述

https://badge.fury.io/py/django-rank-query.svg https://travis-ci.org/petrdlouhy/django-rank-query.svg?branch=master https://codecov.io/gh/petrdlouhy/django-rank-query/branch/master/graph/badge.svg

启用SQL窗口函数,以便在Django查询中使用。为您的查询添加排名。

Django当前版本(1.10)不支持像PostgreSQL中看到的那样[窗口函数]。此实现实现了rankdense_rank,并为upper_rank添加了快捷方式,用于检索排名的上一值(窗口中最后一个元素的排名)。该实现目前只能在PostgreSQL上工作。

注意:窗口函数的支持已在[问题#26608](https://code.djangoproject.com/ticket/26608)中解决。

快速入门

安装rank

pip install django-rank-query

用法

您可以通过以下方式根据用户姓氏的排名(字母表中的顺序号)注释用户

from rank import DenseRank, UpperRank, Rank
users = User.objects.all()
users = user.annotate(lower_rank=Rank('last_name'))
users = user.annotate(upper_rank=UpperRank('last_name'))
users = user.annotate(dense_rank=DenseRank('last_name'))

然后您将拥有带有各种排名的用户查询。例如,您可以通过values函数检索它们

user_ranks = users.values('last_name', 'lower_rank', 'upper_rank')

注意:PostgreSQL不支持将rank函数与GROUP_BY或WHERE子句结合使用。因此,您不能在聚合查询中使用它们。

排名是在当前的select查询中计算的,因此过滤将更改给定元素的排名,因此您不能在例如他的名字过滤的整个表中拥有序列号。这可以通过使用SQL中的子查询来解决,但据我所知,Django不支持它们。

运行测试

代码真的工作吗?

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ tox

致谢

用于渲染此包的工具

历史记录

0.1.0 (2017-01-20)

  • 在PyPI上首次发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-rank-query-0.1.0.tar.gz (16.5 kB 查看哈希值)

上传时间

支持