我們很少會一次性從數據庫中取出所有的數據;通常都只針對一部分數據進行操作。 在Django API中,我們可以使用`` filter()`` 方法對數據進行過濾:
1
2
|
>>> Publisher.objects. filter (name = 'Apress' ) [<Publisher: Apress>] |
filter() 根據關鍵字參數來轉換成 WHERE SQL語句。 前面這個例子 相當于這樣:
1
2
3
|
SELECT id, name , address, city, state_province, country, website FROM books_publisher WHERE name = 'Apress' ; |
你可以傳遞多個參數到 filter() 來縮小選取范圍:
1
2
|
>>> Publisher.objects. filter (country = "U.S.A." , state_province = "CA" ) [<Publisher: Apress>] |
多個參數會被轉換成 AND SQL從句, 因此上面的代碼可以轉化成這樣:
1
2
3
4
|
SELECT id, name , address, city, state_province, country, website FROM books_publisher WHERE country = 'U.S.A.' AND state_province = 'CA' ; |
注意,SQL缺省的 = 操作符是精確匹配的, 其他類型的查找也可以使用:
1
2
|
>>> Publisher.objects. filter (name__contains = "press" ) [<Publisher: Apress>] |
在 name 和 contains 之間有雙下劃線。和Python一樣,Django也使用雙下劃線來表明會進行一些魔術般的操作。這里,contains部分會被Django翻譯成LIKE語句:
1
2
3
|
SELECT id, name , address, city, state_province, country, website FROM books_publisher WHERE name LIKE '%press%' ; |
其他的一些查找類型有:icontains(大小寫無關的LIKE),startswith和endswith, 還有range(SQLBETWEEN查詢)。