zoukankan      html  css  js  c++  java
  • 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 "<(Article: id: %s,title: %s, content: %s)>" % (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语句中的:WHERE article.title LIKE 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,并且重以下打印的结果中可以看出,我们的查询条件被翻译成了:WHERE article.title LIKE %hello%,这里的LIKE进行的查找就是大小写不敏感的查找。

    在这里插入图片描述

    总结:iexact和exact进行的是准确性的查找,只有完全匹配我们的值“hello”的时候,才能够被找到。而icontains和contains中的查询条件,在进行查找的时候,会被翻译成sql语句中包含“%hello%”,在这里%意味着,前面可以含有n个字符,后面也可以含有n个字符。只要数据中包含hello字符串,就满足条件。
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    RMAN还原时注意set newname时文件名不要有空格
    注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感问题
    ORA-04028: cannot generate diana for object xxx
    Linux传统Huge Pages与Transparent Huge Pages再次学习总结
    SQL Server 死锁的告警监控
    PlateSpin备份服务器时SQL Server的一些活动信息
    MS SQL xp_instance_regwrite设置注册表疑惑
    AutoAudit研究学习
    The Windows account sa does not exist and cannot be provisioned as a SQL Server system administrator
    Innotop简单介绍
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12261773.html
Copyright © 2011-2022 走看看