对django的QuerySets(查询集)的理解
来源:互联网 发布:sql某列后加合计数 编辑:程序博客网 时间:2024/06/06 18:56
查询集 是惰性执行的 —— 创建查询集不会带来任何数据库的访问。你可以将过滤器保持一整天,直到查询集 需要求值时,Django 才会真正运行这个查询。看下这个例子:
>>> q = Entry.objects.filter(headline__startswith="What")
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")
>>> print(q)
虽然它看上去有三次数据库访问,但事实上只有在最后一行(print(q))时才访问一次数据库。一般来说,只有在“请求”查询集 的结果时才会到数据库中去获取它们。当你确实需要结果时,查询集 通过访问数据库来求值。 关于求值发生的准确时间,参见何时计算查询集。
可以使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。
例如,下面的语句返回前面5 个对象(LIMIT 5):
>>> Entry.objects.all()[:5]
下面这条语句返回第6 至第10 个对象(OFFSET 5 LIMIT 5):
>>> Entry.objects.all()[5:10]
不支持负的索引(例如Entry.objects.all()[-1])。
通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。有一个例外,是如果你使用Python 切片语法中"step"参数。例如,下面的语句将返回前10 个对象中每隔2个对象,它将真实执行查询:
>>> Entry.objects.all()[:10:2]
用 PyCharm debug 查看 logs2 和 logs3 的 SQL 语句是一样的。LIMIT 8 OFFSET 2
logs1 = LogInfo.objects.all()
logs2 = logs1[2:10]
logs3 = LogInfo.objects.all()[2:10]
>>> q = Entry.objects.filter(headline__startswith="What")
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")
>>> print(q)
虽然它看上去有三次数据库访问,但事实上只有在最后一行(print(q))时才访问一次数据库。一般来说,只有在“请求”查询集 的结果时才会到数据库中去获取它们。当你确实需要结果时,查询集 通过访问数据库来求值。 关于求值发生的准确时间,参见何时计算查询集。
可以使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。
例如,下面的语句返回前面5 个对象(LIMIT 5):
>>> Entry.objects.all()[:5]
下面这条语句返回第6 至第10 个对象(OFFSET 5 LIMIT 5):
>>> Entry.objects.all()[5:10]
不支持负的索引(例如Entry.objects.all()[-1])。
通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。有一个例外,是如果你使用Python 切片语法中"step"参数。例如,下面的语句将返回前10 个对象中每隔2个对象,它将真实执行查询:
>>> Entry.objects.all()[:10:2]
用 PyCharm debug 查看 logs2 和 logs3 的 SQL 语句是一样的。LIMIT 8 OFFSET 2
logs1 = LogInfo.objects.all()
logs2 = logs1[2:10]
logs3 = LogInfo.objects.all()[2:10]
0 0
- 对django的QuerySets(查询集)的理解
- django QuerySets结果集是延迟的
- 有效使用Django的QuerySets
- 有效使用Django的QuerySets
- 有效使用Django的QuerySets
- Django ORM返回QuerySets的某些函数
- django的sql返回结果QuerySets
- Using Django querysets effectively
- Django models中多对多字段的反查询
- 对mysql多表查询的理解
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)
- Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
- Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
- 实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)
- Android:学习AIDL,这一篇文章就够了(上)
- PHP之前端数据联调
- Java接口
- django-part01
- Java获取当前路径
- 对django的QuerySets(查询集)的理解
- Android:学习AIDL,这一篇文章就够了(下)
- 解决dubbo问题:forbid consumer
- Notification显示过程详解
- JSP的7个动作指令之forward指令
- 春运抢票攻略
- Map.Entry使用详解
- 临时关闭Mac SIP系统完整性保护机制
- 利用新浪云SAE搭建可访问的免费个人网站