查詢條件
- 常用條件
- exact
- iexact
- contains
- icontains
- in
- range
- date
- year
- time
- 關聯表查詢
- 比較運算
- gt
- gte
- lt
- lte
常用條件
exact
使用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
使用iexact相當于是SQL層面的like,
book = Book.objects.filter(id__iexact=1)
以上查找陳述句在SQL底層的陳述句為:
select * from book where id like '1';
contains
大小寫敏感的匹配查詢,相當于like,陳述句轉化后兩邊都有%,
book = Book.objects.filter(name__contains='Hello')
以上查找陳述句在SQL底層的陳述句為:
select * from book where name like binary '%Hello%';
icontains
大小寫不敏感的匹配查詢,相當于like,陳述句轉化后兩邊都有%,
book = Book.objects.filter(name__icontains='Hello')
以上查找陳述句在SQL底層的陳述句為:
select * from book where name like '%Hello%';
in
查詢給定的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)
range
判斷某個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
針對某些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';
year
根據年份進行查找,
# 查詢出版時間為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';
time
根據時間來查找,
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);
比較運算
gt
查詢某個filed的值大于給定值,
# 查詢id>2的書籍
books = Book.objects.filter(id__gt=2)
以上查找陳述句在SQL底層的陳述句為:
select * from book where id > 2;
gte
查詢某個filed的值大于等于給定值,
lt
查詢某個filed的值小于給定值,
lte
查詢某個filed的值小于等于給定值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/246911.html
標籤:其他
上一篇:怎么猜測mysql資料庫的text型別欄位對應的字串可以有多長?
下一篇:不同型別的事實表匯入操作總結
