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字符串,就满足条件。

最新文章

  1. UIDynamic(捕捉行为)
  2. HDU 2669
  3. DTCMS插件的制作实例电子资源管理(一)插件目录结构
  4. BZOJ1207 [HNOI2004]打鼹鼠
  5. XCode环境变量及路径设置
  6. Windows开启Telnet
  7. BZOJ 2432 兔农
  8. DedeCMS中最重要的四类表
  9. 解决错误 fatal error C1010: unexpected end of file while looking for precompiled head
  10. 2016&quot;百度之星&quot; - 资格赛(Astar Round1) Problem C
  11. Linux之第一个shell命令
  12. UVA1600 状态BFS
  13. Pop Star 1.2.5
  14. Mybatis测试用例
  15. CreateFile DeviceIoControl dwIoControlCode——应用程序与驱动程序通信
  16. Eureka 源码编译 部署
  17. vue项目引入element
  18. bzoj 3545/3551: [ONTAK2010]Peaks -- 主席树,最小生成树,倍增
  19. Windoows窗口程序一
  20. CentOS6.8忘记root密码的解决办法(开始初始化也可以用)

热门文章

  1. C# 创建Windows Service(Windows服务)程序
  2. Ubuntu 移植 ffmpeg + x264
  3. arm linux 支持 wifi (wpa_supplicant)
  4. 201706 gem 'rails-erd'生成Model关系图
  5. nodejs配置 https服务
  6. 刷题21. Merge Two Sorted Lists
  7. 003、Java的单行注释
  8. 009.Oracle数据库 , between关键字判断日期在两者之间
  9. spark shuffle发展历程
  10. apache端口修改为80