1. 程式人生 > 其它 >python測試開發django-170.ORM查詢之contains和icontains

python測試開發django-170.ORM查詢之contains和icontains

前言

平常用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%';