在 Django 中,字段条件查询是指使用 ORM(Object-Relational Mapping)来构建数据库查询语句,以过滤和获取符合特定条件的数据记录。
- 1常用查询关键字
- 1.1exact(精确匹配)
- 1.2iexact(忽略大小写的精确匹配)
- 1.3contains(包含查询)
- 1.4icontains(忽略大小写的包含查询)
- 1.5startswith(以指定内容开头查询)
- 1.6istartswith(忽略大小写的以指定内容开头查询)
- 1.7endswith(以指定内容结尾查询)
- 1.8iendswith(忽略大小写的以指定内容结尾查询)
- 1.9range(范围查询)
- 1.10gt(大于查询)
- 1.11lt(小于查询)
- 1.12gte(大于等于查询)
- 1.13lte(小于等于查询)
- 1.14isnull(为空查询)
- 1.15in(包含在列表中查询)
- 2所有条件查询关键字
常用查询关键字
下面是一些常用的字段条件查询关键字,以及相应的示例代码和解释:
exact(精确匹配)
from myapp.models import Product
# 获取name字段为"Widget"的产品
product = Product.objects.get(name__exact="Widget")
使用 exact 关键字,可以对字段进行精确匹配查询。上述代码中,我们从 Product 模型中获取 name 字段为"Widget"的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name = 'Widget';。
iexact(忽略大小写的精确匹配)
# 获取name字段为"widget"的产品,忽略大小写
product = Product.objects.get(name__iexact="widget")
使用 iexact 关键字,可以对字段进行忽略大小写的精确匹配查询。上述代码中,我们从 Product 模型中获取 name 字段为"widget"的产品,无论"widget"是大写还是小写,都能匹配成功。
contains(包含查询)
# 获取name字段包含"gadget"的产品
products = Product.objects.filter(name__contains="gadget")
使用 contains 关键字,可以对字段进行包含查询。上述代码中,我们从 Product 模型中筛选出 name 字段包含"gadget"的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE '%gadget%';。
icontains(忽略大小写的包含查询)
# 获取name字段包含"Gadget"的产品,忽略大小写
products = Product.objects.filter(name__icontains="Gadget")
使用 icontains 关键字,可以对字段进行忽略大小写的包含查询。上述代码中,我们从 Product 模型中筛选出 name 字段包含"Gadget"的产品,无论"Gadget"的大小写如何,都能匹配成功。
startswith(以指定内容开头查询)
# 获取name字段以"Super"开头的产品
products = Product.objects.filter(name__startswith="Super")
使用 startswith 关键字,可以对字段进行以指定内容开头的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"Super"开头的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE 'Super%';。
istartswith(忽略大小写的以指定内容开头查询)
# 获取name字段以"super"开头的产品,忽略大小写
products = Product.objects.filter(name__istartswith="super")
使用 istartswith 关键字,可以对字段进行忽略大小写的以指定内容开头的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"super"开头的产品,无论"super"的大小写如何,都能匹配成功。
endswith(以指定内容结尾查询)
# 获取name字段以"123"结尾的产品
products = Product.objects.filter(name__endswith="123")
使用 endswith 关键字,可以对字段进行以指定内容结尾的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"123"结尾的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE '%123';。
iendswith(忽略大小写的以指定内容结尾查询)
# 获取name字段以"XYZ"结尾的产品,忽略大小写
products = Product.objects.filter(name__iendswith="XYZ")
使用 iendswith 关键字,可以对字段进行忽略大小写的以指定内容结尾的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"XYZ"结尾的产品,无论"XYZ"的大小写如何,都能匹配成功。
range(范围查询)
# 获取price字段在100到200之间的产品
products = Product.objects.filter(price__range=(100, 200))
使用 range 关键字,可以对字段进行范围查询。上述代码中,我们从 Product 模型中筛选出 price 字段在 100 到 200 之间的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price BETWEEN 100 AND 200;。
gt(大于查询)
# 获取price字段大于100的产品
products = Product.objects.filter(price__gt=100)
使用 gt 关键字,可以对字段进行大于查询。上述代码中,我们从 Product 模型中筛选出 price 字段大于 100 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price > 100;。
lt(小于查询)
# 获取price字段小于200的产品
products = Product.objects.filter(price__lt=200)
使用 lt 关键字,可以对字段进行小于查询。上述代码中,我们从 Product 模型中筛选出 price 字段小于 200 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price < 200;。
gte(大于等于查询)
# 获取price字段大于等于150的产品
products = Product.objects.filter(price__gte=150)
使用 gte 关键字,可以对字段进行大于等于查询。上述代码中,我们从 Product 模型中筛选出 price 字段大于等于 150 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price >= 150;。
lte(小于等于查询)
# 获取price字段小于等于250的产品
products = Product.objects.filter(price__lte=250)
使用 lte 关键字,可以对字段进行小于等于查询。上述代码中,我们从 Product 模型中筛选出 price 字段小于等于 250 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price <= 250;。
isnull(为空查询)
# 获取description字段为空的产品
products = Product.objects.filter(description__isnull=True)
使用 isnull 关键字,可以对字段进行为空查询。上述代码中,我们从 Product 模型中筛选出 description 字段为空的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE description IS NULL;。
in(包含在列表中查询)
# 获取id字段在列表[1, 3, 5]中的产品
products = Product.objects.filter(id__in=[1, 3, 5])
使用 in 关键字,可以对字段进行包含在列表中查询。上述代码中,我们从 Product 模型中筛选出 id 字段在列表[1, 3, 5]中的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE id IN (1, 3, 5);。
这些是一些常用的字段条件查询关键字,通过它们,您可以构建复杂的查询语句来过滤和获取数据库中的数据记录。在实际应用中,可以根据具体需求选择合适的关键字来执行查询操作,从而获得符合预期条件的数据。
所有条件查询关键字
以下是 Django 字段条件查询的所有关键字列表:
| 关键字 | 作用 |
|---|---|
| contains | 筛选包含特定字符串。 |
| icontains | 筛选包含不区分大小写特定字符串。 |
| date | 对日期字段进行过滤。 |
| day | 日期字段的天数进行匹配。 |
| endswith | 筛选以特定后缀结尾的字段值。 |
| iendswith | 筛选不区分大小写以特定后缀结尾的字段值。 |
| exact | 查询匹配字段的完全相等值。 |
| iexact | 大小写不敏感的精确匹配查询。 |
| in | 筛选出字段的值在给定列表中。 |
| isnull | 检查某个字段是否为空。 |
| gt | 筛选出大于指定值。 |
| gte | 筛选大于等于指定值。 |
| hour | 筛选符合指定小时的数据。 |
| lt | 筛选小于指定值。 |
| lte | 筛选小于等于指定值。 |
| minute | 筛选符合指定分钟的数据。 |
| month | 筛选符合指定月份的数据。 |
| quarter | 筛选指定日期字段的季度。 |
| range | 指定范围条件。 |
| regex | 正则表达式匹配。 |
| iregex | 不区分大小写的正则表达式匹配。 |
| second | 筛选时间字段的秒数。 |
| startswith | 匹配字符开头。 |
| istartswith | 不区分大小写匹配字符开头。 |
| time | 使用时间相关的条件过滤。 |
| week | 对日期时间字段进行周数条件筛选 |
| week_day | 指定某一周的星期几来过滤。 |
| iso_week_day | 对日期字段 ISO 周天条件查询。 |
| year | 提取年份过滤查询。 |
| iso_year | iso 提取年份过滤查询。 |