python contains_63.Python中contains和icontains

1. contains: 进行大小写敏感的判断,某个字符串是否包含在指定的字段中,这个判断条件使用大小写敏感进行判断,因此在被翻译成“SQL”语句的时候,会使用“like binary”, 而“like binary”就是使用大小写敏感进行判断。

2. icontains: 进行大小写不敏感的判断,某个字符串是否包含在指定的字段中,这个判断条件使用大小写不敏感进行判断,因此在被翻译成“SQL”语句的时候,会使用“like”, 而“like”就是使用大小写不敏感进行判断。其中icontains前面的i指的就是ignore(忽略)。

具体实例,示例代码如下:

models.py文件中模型的定义,示例代码如下:

from django.db import models

class Article(models.Model):

title = models.CharField(max_length=100)

content = models.TextField()

# 重写类的__str__(self)方法

def __str__(self):

return "" % (self.id, self.title, self.content)

# 重新定义表的一些属性,注意:此处的类的名字一定要为Meta

class Meta:

db_table = 'article'

1. contains: views.py文件中视图函数的示例代码如下:

from django.http import HttpResponse

from .models import Article

def index(request):

# 注意:此处是使用filter(),只有使用filter()之后才能够在article(QuerySet)上调用query属性,查看django底层转化的sql语句。

article = Article.objects.filter(title__contains='hello')

print(article)

print(article.query)

return HttpResponse('success !')

在mysql数据库中article表的数据信息如下:

因为contains进行的是大小写敏感的查找,所以不能找到匹配的数据,则会返回QuerySet为空。并且我们可以看到执行我们的查找条件的时候,django底层翻译成的sql语句中的:WHEREarticle.titleLIKE BINARY %hello%,这里的LIKE BINARY 就可以保证进行的查找为大小写敏感的查找,并且hello字符串的两边会有%(代表hello字符串前面可以含有别的字符,后面也可以含有别的字符),这就可以验证我们上面的解释。

2.icontains: views.py文件中视图函数示例代码如下:

from django.http import HttpResponse

from .models import Article

def index(request):

# icontains进行查找title中包含“hello”的字符串

article = Article.objects.filter(title__icontains='hello')

print(article)

print(article.query)

return HttpResponse("success")

因为使用icontains采用的是大小写不敏感的的查找方式,所以会返回两条满足条件的QuerySet,并且重以下打印的结果中可以看出,我们的查询条件被翻译成了:WHEREarticle.titleLIKE %hello%,这里的LIKE进行的查找就是大小写不敏感的查找。

总结:iexact和exact进行的是准确性的查找,只有完全匹配我们的值“hello”的时候,才能够被找到。而icontains和contains中的查询条件,在进行查找的时候,会被翻译成sql语句中包含“%hello%”,在这里%意味着,前面可以含有n个字符,后面也可以含有n个字符。只要数据中包含hello字符串,就满足条件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值