gpt4 book ai didi

python - django queryset 运行时 - 在恒定时间内获取第 n 个条目

转载 作者:行者123 更新时间:2023-12-02 05:04:00 24 4
gpt4 key购买 nike

我正在使用多种方法通过不同的 Django 查询集从数据库中获取数据,但我想知道每个查询集的运行时间,如果可能的话,还有更好的方法(也许可以在恒定时间内获取数据!!)

qs = MyModel.objects.order_by('-time')
qs = qs.filter(blah = blah)

为了获得我这样做的第一个条目:

entry = list(qs[:1])
first_entry = entry[0]

或获取第 10 个也是最后一个条目:

entry = list(qs)
some_entry = entry[9]
last_entry = entry[-1]

但我相信这将花费 O(n) 时间,是否可以在常数时间内获得第 n 项?我不想使用 get(),因为我不知道条目的 ID 或其他值(已排序),但只知道位置。

我也可以使用注释,但这也需要 O(n) 运行时间。

MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0] 

我知道这个职位只需要在恒定时间内输入?

最佳答案

来自文档:

Use a subset of Python’s array-slicing syntax to limit your QuerySet to a certain number of results. This is the equivalent of SQL’s LIMIT and OFFSET clauses.

Generally, slicing a QuerySet returns a new QuerySet – it doesn’t evaluate the query. An exception is if you use the “step” parameter of Python slice syntax.

To retrieve a single object rather than a list (e.g. SELECT foo FROM bar LIMIT 1), use a simple index instead of a slice.

https://docs.djangoproject.com/en/dev/topics/db/queries/#limiting-querysets

关于在切片时不评估查询集的部分是重要的部分。

关于python - django queryset 运行时 - 在恒定时间内获取第 n 个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com