本文介紹 django.db.models.Exists
的用法。
聲明
class Exists(queryset)
Exists
是使用 SQL EXISTS
語句的 Subquery
子類。在許多情況下,它會比子查詢執行得更好,因為數據庫能夠在找到第一個匹配行時停止對子查詢的評估。
例如,要注釋每個帖子是否有來自最後一天的評論:
>>> from django.db.models import Exists, OuterRef
>>> from datetime import timedelta
>>> from django.utils import timezone
>>> one_day_ago = timezone.now() - timedelta(days=1)
>>> recent_comments = Comment.objects.filter(
... post=OuterRef('pk'),
... created_at__gte=one_day_ago,
... )
>>> Post.objects.annotate(recent_comment=Exists(recent_comments))
在 PostgreSQL 上,SQL 看起來像:
SELECT "post"."id", "post"."published_at", EXISTS(
SELECT (1) as "a"
FROM "comment" U0
WHERE (
U0."created_at" >= YYYY-MM-DD HH:MM:SS AND
U0."post_id" = "post"."id"
)
LIMIT 1
) AS "recent_comment" FROM "post"
沒有必要強製 Exists
引用單個列,因為這些列被丟棄並返回布爾結果。同樣,由於排序在 SQL EXISTS
子查詢中並不重要,並且隻會降低性能,因此會自動將其刪除。
您可以使用 NOT EXISTS
和 ~Exists()
進行查詢。
相關用法
- Python Django Expression.relabeled_clone用法及代碼示例
- Python Django Extent用法及代碼示例
- Python Django Exp用法及代碼示例
- Python Django Expression.get_source_expressions用法及代碼示例
- Python Django Extent3D用法及代碼示例
- Python Excel轉PDF用法及代碼示例
- Python Django ExclusionConstraint.expressions用法及代碼示例
- Python Django ExclusionConstraint.opclasses用法及代碼示例
- Python Django ExclusionConstraint.deferrable用法及代碼示例
- Python Excel轉CSV用法及代碼示例
- Python Django ExceptionReporter.get_traceback_data用法及代碼示例
- Python Example filter()用法及代碼示例
- Python Enumerate()用法及代碼示例
- Python Django EmailBackend用法及代碼示例
- Python Event is_set()用法及代碼示例
- Python Event wait()用法及代碼示例
- Python Event clear()用法及代碼示例
- Python Event set()用法及代碼示例
- Python cudf.core.column.string.StringMethods.is_vowel用法及代碼示例
- Python torch.distributed.rpc.rpc_async用法及代碼示例
- Python torch.nn.InstanceNorm3d用法及代碼示例
- Python sklearn.cluster.MiniBatchKMeans用法及代碼示例
- Python pandas.arrays.IntervalArray.is_empty用法及代碼示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代碼示例
- Python numpy.less()用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.db.models.Exists。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。