使用exact相当于是SQL层面的=,如果赋值为None,则在SQL层面将被解释为null。
book = Book.objects.filter(id__exact=1)
book = Book.objects.filter(id__exact=None)
以上两条查找语句在SQL底层的语句为:
select * from book where id=1;
select * from book where id IS NULL;
使用iexact相当于是SQL层面的like。
book = Book.objects.filter(id__iexact=1)
以上查找语句在SQL底层的语句为:
select * from book where id like '1';
大小写敏感的匹配查询,相当于like,语句转化后两边都有%。
book = Book.objects.filter(name__contains='Hello')
以上查找语句在SQL底层的语句为:
select * from book where name like binary '%Hello%';
大小写不敏感的匹配查询,相当于like,语句转化后两边都有%。
book = Book.objects.filter(name__icontains='Hello')
以上查找语句在SQL底层的语句为:
select * from book where name like '%Hello%';
查询给定的field的值是否在给定的容器中。容器可以为list、tuple或者任何一个可以迭代的对象,包括QuerySet对象。
book = Book.objects.filter(id__in=[1, 2, 3])
以上查找语句在SQL底层的语句为:
select * from book where id IN (1,2,3);
QuerySet对象查询:
book = Book.objects.filter(id__in=[1, 2, 3])
publisher = Publisher.objects.filter(book__in=book)
判断某个field的值是否在给定区间中。
# 查询书籍id为1-4的书籍
books = Book.objects.filter(id__range=(1, 4))
# 根据时间段查询
from datetime import datetime
start_time = datetime(year=2021, month=1, day=2)
end_time = datetime(year=2021, month=1, day=9)
books = Book.objects.filter(pub_time__range=(start_time, end_time))
以上两个查找语句在SQL底层的语句为:
select * from book where id between 1 and 4;
select * from book where pub_time between '2021-01-02 00:00:00' and '2021-01-09 00:00:00';
针对某些date或者datetime类型的字段进行查询。
# 方式1
from datetime import datetime
books = Book.objects.filter(pub_time__date=datetime(year=2021, month=1, day=9))
# 方式2
books = Book.objects.filter(pub_time__date='2021-01-09')
# 查询出版时间为2021-01-02之后的书籍
books = Book.objects.filter(pub_time__date__gt='2021-01-02')
以上查找语句在SQL底层的语句都为:
# 方式1和方式2
SELECT * FROM `book` WHERE DATE(`pub_time`) = '2021-01-09';
# 查询出版时间为2021-01-02之后的书籍
SELECT * FROM `book` WHERE DATE(`pub_time`) > '2021-01-02';
根据年份进行查找。
# 查询出版时间为2021年的书籍
books = Book.objects.filter(pub_time__year='2021')
# 查询出版时间在2020年之后的书籍
books = Book.objects.filter(pub_time__year__gt='2020')
以上查找语句在SQL底层的语句都为:
# 查询出版时间为2021年的书籍
select * from book where pub_time BETWEEN '2021-01-01 00:00:00' AND '2021-12-31 23:59:59.999999';
# 查询出版时间在2020年之后的书籍
select * from book where pub_time > '2020-12-31 23:59:59.999999';
根据时间来查找。
from datetime import time
books = Book.objects.filter(pub_time__time=time(hour=9, minute=22, second=33))
以上查找语句在SQL底层的语句都为:
select * from book where TIME(`pub_time`) = '09:22:33';
publisher = Publisher.objects.filter(book__id__in=[1, 2, 3])
以上查找语句在SQL底层的语句为:
SELECT * FROM `publisher` INNER JOIN `book` ON (`publisher`.`id` = `book`.`publisher_id`) WHERE `book`.`id` IN (1, 2, 3);
查询某个filed的值大于给定值。
# 查询id>2的书籍
books = Book.objects.filter(id__gt=2)
以上查找语句在SQL底层的语句为:
select * from book where id > 2;
查询某个filed的值大于等于给定值。
查询某个filed的值小于给定值。
查询某个filed的值小于等于给定值。