python測試開發django-170.ORM查詢之contains和icontains
阿新 • • 發佈:2021-11-09
前言
平常用ORM大部分使用的是get、filter、exclude這三種能滿足基本的需求,有時我們需要滿足一些複雜的查詢場景,在頁面上傳不同引數滿足查詢需求。
ORM 條件查詢使用field__
結合 condition 的方式來使用的,比如查詢包含指定的字元,可以用contains和icontains。
contains和icontains 區別
比如有下面這張表
MyDjango>python manage.py shell >>> Product.objects.filter(name__contains='yy') <QuerySet [<Product: Product object (2)>, <Product: Product object (3)>]> >>> Product.objects.filter(name__icontains='yy') <QuerySet [<Product: Product object (2)>, <Product: Product object (3)>, <Product: Product object (4)>]> >>>
contains表示精確大小寫,icontains
中的i
表示忽略大小寫
filter(name__contains='yy')
是查詢name包含小寫的yy的內容filter(name__icontains='yy')
是查詢name包含yy的字元,不區分大小寫
對應SQL語句
SQL 查詢like 後面帶上 BINARY 就是精確大小寫查詢
name__contains='yy'
對應sql語句where name like BINARY '%yy%'
name__icontains='yy'
對應SQL 語句where name like '%yy%'
/* BINARY精確大小寫yy */ select * from yoyo_product where name like BINARY '%yy%'; /* 忽略大小寫yy */ select * from yoyo_product where name like '%yy%';