QuerySet 本身可以被构造,过滤,切片,或者复制赋值等,是无需访问数据库的。
只有在你需要从数据库取出数据或者向数据库存入数据时才会访问数据库。
判断QuerySet是否有数据
推荐使用:
from apps.sbom_manager.models import *
if Component.objects.count():
# TODO
不推荐使用:
if Component.objects.all():
# TODO
查看查询结果的条数
推荐使用:
Component.objects.count()
Out[9]: 523
Component.objects.filter(name='poi').count()
Out[10]: 4
使用count方法在SQL中会执行SELECT COUNT(*)
不推荐使用:
len(Component.objects.all())
实现SQL中的NOT、AND、OR查询效果
1)使用exclude方法实现NOT效果
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
SELECT ...
WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello')
2)使用filter方法的多个参数实现AND效果
Model.objects.filter(x=1, y=2)
使用Q方法和&符号
from django.db.models import Q
Model.objects.filter(Q(x=1) & Q(y=2))
3)使用Q方法和|符号实现OR效果
from django.db.models import Q
Model.objects.filter(Q(x=1) | Q(y=2))