推荐答案
// www.javascriptcn.com code example
# 查询所有数据
MyModel.objects.all()
# 查询单条数据
MyModel.objects.get(id=1)
# 过滤查询
MyModel.objects.filter(name='example')
# 排除查询
MyModel.objects.exclude(name='example')
# 排序查询
MyModel.objects.order_by('name')
# 限制查询结果数量
MyModel.objects.all()[:5]
# 聚合查询
from django.db.models import Count, Avg
MyModel.objects.aggregate(Count('id'), Avg('price'))
# 关联查询
MyModel.objects.select_related('related_model').all()
# 使用 Q 对象进行复杂查询
from django.db.models import Q
MyModel.objects.filter(Q(name='example') | Q(age=25))
# 使用 F 表达式进行字段比较
from django.db.models import F
MyModel.objects.filter(price__gt=F('discounted_price'))本题详细解读
1. 查询所有数据
MyModel.objects.all() 返回 MyModel 表中的所有记录。这是一个惰性查询,只有在实际使用数据时才会执行数据库查询。
2. 查询单条数据
MyModel.objects.get(id=1) 返回 id 为 1 的记录。如果找不到记录或找到多条记录,会抛出 DoesNotExist 或 MultipleObjectsReturned 异常。
3. 过滤查询
MyModel.objects.filter(name='example') 返回 name 字段为 'example' 的所有记录。filter 方法返回的是一个 QuerySet,可以进一步链式调用其他方法。
4. 排除查询
MyModel.objects.exclude(name='example') 返回 name 字段不为 'example' 的所有记录。与 filter 类似,exclude 也返回一个 QuerySet。
5. 排序查询
MyModel.objects.order_by('name') 返回按 name 字段升序排列的所有记录。如果要降序排列,可以使用 order_by('-name')。
6. 限制查询结果数量
MyModel.objects.all()[:5] 返回前 5 条记录。Django 的 QuerySet 支持切片操作,类似于 Python 的列表切片。
7. 聚合查询
MyModel.objects.aggregate(Count('id'), Avg('price')) 返回一个字典,包含 id 字段的计数和 price 字段的平均值。aggregate 方法用于对 QuerySet 进行聚合操作。
8. 关联查询
MyModel.objects.select_related('related_model').all() 返回 MyModel 表中的所有记录,并预加载 related_model 的关联数据。select_related 用于优化一对一或多对一关系的查询。
9. 使用 Q 对象进行复杂查询
MyModel.objects.filter(Q(name='example') | Q(age=25)) 返回 name 为 'example' 或 age 为 25 的所有记录。Q 对象允许构建复杂的查询条件。
10. 使用 F 表达式进行字段比较
MyModel.objects.filter(price__gt=F('discounted_price')) 返回 price 大于 discounted_price 的所有记录。F 表达式用于在查询中引用模型字段的值。