在 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 提取年份过滤查询。 |