Django 第十课 4.【ORM查询操作】
#查询
1:exact:在底层会被翻译成 ‘=’
article = Article.objects.filter(title__exact='hello')
2:iexact:在底层被翻译成 ‘LIKE’
article = Article.objects.filter(title__iexact='hello')
* LIKE 和 = :大部分情况下都是等价的,只有少数情况下是不等价的。
* exact和iexact:他们的区别其实就是LIKE和=的区别,因为exact会被翻译成=,而iexact会被翻译LIKE
* 因为 ‘field_exact=xxx’ 其实等价于 ‘field=xxx’,因此我们直接使用 ‘field=xxx’就可以了,并且因为大部分情况 ‘exact’和‘iexact’又是等价的,因为我们以后直接使用 ‘field=xxx’就可以了
3: QuerySet.query: 'query' 可以用来查看合格‘ORM’查询语句最终被翻译成的SQL语句。但是‘query’只能被用在 ‘QuerySet’ 对象上,不能用在普通的‘ORM模型’上。因此如果你得查询语句是通过‘get’来获取数据的,那么就不能使用‘query’,因为‘get’返回的是满足条件的‘ORM’模型,而不是‘QuerySet’。如果你是通过‘filter’等其他返回 ‘QuerySet’的方法查询的,那么就可以使用‘query’
4: contains: 使用大小写敏感的判断,某个字符串是否在指定的字段中。这个判断条件会使用大小写敏感,因此在被翻译成 ‘SQL’语句的时候,会使用‘like binary’,而‘like binary’就是使用大小写敏感的
5:icontains:使用大小写不敏感的判断,某个字符串是否被包含在指定的字段中。这个查询语句在被翻译成‘SQL’的时候,使用的是‘like’,而‘like’在‘MySql’层面就是不区分大小写的。
6:contains和icontain:在被翻译成‘SQL’的时候使用的是 ‘%like%’,就是只要整个字符串中出现‘hello’都能过够被找到,而‘iexact’没有百分号,那么意味着只要完全相等的时候才会被匹配到