启用用于django查询的sql窗口函数。向查询添加排名。
django-rank-quer的Python项目详细描述
启用用于django查询的sql窗口函数。向查询添加排名。
curren't版本(1.10)中的django不支持postgresql中的[窗口函数](https://www.postgresql.org/docs/9.3/static/functions-window.html)。 这将实现秩,稠密秩并为上秩添加快捷方式,从而检索秩的上值(窗口中最后一个元素的秩)。 该实现目前仅在postgresql上工作。
注意:对窗口函数的支持已经在[issue 26608](https://code.djangoproject.com/ticket/26608)中得到解决。
快速启动
安装等级:
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'))
然后用不同的列组注释用户查询。例如,您可以通过值函数来检索它们:
user_ranks = users.values('last_name', 'lower_rank', 'upper_rank')
注意:PostgreSQL不支持将rank函数与group by或在where子句中组合。因此不能在聚合查询中使用它们。
排名是在当前的查询中计算的,所以过滤会改变给定元素的排名,所以不能让整张表中的序号被ie.his name过滤掉。 这可以通过在sql中使用子查询来解决,但据我所知,django不支持它们。
运行测试
代码真的有用吗?
source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install tox (myenv) $ tox
历史记录
0.1.0(2017-01-20)
- pypi上的第一个版本。