📜  测试queryset django中的实例 - Python(1)

📅  最后修改于: 2023-12-03 15:11:05.640000             🧑  作者: Mango

测试 QuerySet 在 Django 中的实例

在 Django 中,我们使用 QuerySet 来进行数据库查询和操作。QuerySet 是一个查询集合,它允许我们在数据库中执行多种操作,例如过滤数据、排序、限制结果集以及聚合数据等。

创建 QuerySet

首先,我们需要在 Django 中定义一个模型来映射到数据库表中。下面是一个简单的示例模型定义:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=7, decimal_places=2)
    published_date = models.DateField()

上述代码定义了一个名为 Book 的模型,它有四个属性:title、author、price 和 published_date。其中,title 和 author 是字符串类型,price 是一个十进制数(存储 7 位数字和 2 位小数),published_date 是一个日期类型。

要在数据库中创建这个表,我们需要运行下面的命令:

python manage.py makemigrations
python manage.py migrate

接下来,我们可以使用这个模型来创建 QuerySet,例如:

from myapp.models import Book

# 获取所有 Book 对象
qs = Book.objects.all()

# 根据价格过滤 Book 对象
qs = Book.objects.filter(price__gt=10)

上述代码中,Book.objects 是一个 QuerySet 对象。.all() 方法返回所有 Book 对象,.filter() 方法根据条件过滤 Book 对象。price__gt=10 表示价格大于 10 的 Book 对象。

查询结果

我们可以像操作列表一样来遍历和操作 QuerySet,例如:

for book in qs:
    print(book.title)

我们也可以使用查询操作符(例如 count()first()last()exists() 等)来查询结果,例如:

# 获取总数
count = qs.count()

# 获取第一个对象
book = qs.first()

# 获取最后一个对象
book = qs.last()

# 判断是否存在对象
exists = qs.exists()

注意,这些查询操作符不会返回 QuerySet,它们返回的是实际的对象或值。

连接查询

我们可以使用链式调用来进行多个查询条件的组合,例如:

# 获取价格大于 10 并且出版日期早于 2020 年的 Book 对象
qs = Book.objects.filter(price__gt=10, published_date__lt='2020-01-01')

上述代码中,.filter() 方法可以接受多个查询条件,并使用逗号(,)来分隔它们。在上例中,我们使用了价格大于 10 和出版日期早于 2020 年这两个条件来筛选结果。

聚合查询

除了基本的查询,我们还可以使用聚合操作来对查询结果进行统计或计算。例如:

from django.db.models import Sum, Avg, Max, Min

# 获取价格总和
total_price = qs.aggregate(Sum('price'))['price__sum']

# 获取平均价格
avg_price = qs.aggregate(Avg('price'))['price__avg']

# 获取最高价格
max_price = qs.aggregate(Max('price'))['price__max']

# 获取最低价格
min_price = qs.aggregate(Min('price'))['price__min']

上述代码中,aggregate() 方法用于聚合操作。Sum()Avg()Max()Min() 分别表示求和、平均、最大和最小操作。

总结

在 Django 中,QuerySet 是一个十分强大的工具,它可以用于多种数据库查询和操作。从简单的过滤、排序和限制结果集,到复杂的聚合和查询组合,QuerySet 可以帮助我们完成许多常见的数据库操作。了解 QuerySet 的用法可以让我们更加高效地使用 Django 来构建 Web 应用程序。