Django object filter查询[转]

用PYTHON ,DJANGO 做站,在通常的情况下,需要用到 orM 的查询方法,比如object.filter(tag__contains=‘keywords‘)....

在这种情况下,如果你跟踪 sql 语句,你会发现,SQL 语句会生成 select .... like bianry ‘%keywords%‘, 如果是这样的语句,在某些情况是下是会出问题的,也就是说查询出来的数据可能会比你预计的少。

如果你用 raw sql 查总数 select count(*) from table where like ‘%keywords%‘ 得到数量可能比你用ORM 采用上面的方式得到的数据多,问题就在于生成的条件问题。

后来查询了 django  说明,如果把ORM 语句变成:object.filter(tag__icontains=‘keywords‘).... 就好了。

注意contains ,icontains 的区别. 后来从django官网查到了说明:

程序代码

operators = {
        ‘exact‘: ‘= %s‘,
        ‘iexact‘: ‘LIKE %s‘,
        ‘contains‘: ‘LIKE BINARY %s‘,
        ‘icontains‘: ‘LIKE %s‘,
        ‘regex‘: ‘REGEXP BINARY %s‘,
        ‘iregex‘: ‘REGEXP %s‘,
        ‘gt‘: ‘> %s‘,
        ‘gte‘: ‘>= %s‘,
        ‘lt‘: ‘< %s‘,
        ‘lte‘: ‘<= %s‘,
        ‘startswith‘: ‘LIKE BINARY %s‘,
        ‘endswith‘: ‘LIKE BINARY %s‘,
        ‘istartswith‘: ‘LIKE %s‘,
        ‘iendswith‘: ‘LIKE %s‘,
    }

参考说明,就可以写自己的语句了。

时间: 2024-12-16 18:51:06

Django object filter查询[转]的相关文章

django model filter查询

1.多表连接查询: class A(models.Model):     name = models.CharField(u'姓名') class B(models.Model):     aa = models.ForeignKey(A) B.objects.filter(aa__name__contains='searchtitle') 2.反向查询: class A(models.Model):     name = models.CharField(u'姓名') class B(mode

django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.  class A(models.Model):    name = models.CharField(u'名称')  class B(models.Model):    aa = models.ForeignKey(A)B.objects.filter(aa__name__contains='searchtitle') 1.5 我叫它反向查询,后来插入记录1.5,当我知道的时候瞬间就觉得django太太太NX了.  class

八、Python Django数据库添加查询

Python Django数据库添加查询 对数据进行操作 一.创建记录 # pwd /root/csvt03 # ipython manage.py shell In [1]: from blog.models import Employee #(第一种方法) In [2]: Employee Out[2]: blog.models.Employee In [3]: emp = Employee() In [4]: emp.name = 'Alen' In [5]: emp.save() #(第

django orm 的查询条件

Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的参数来实现查询需求. 在mysql中,想要查询数据,就需要使用where关键字加上字段条件去查询,在Django的orm之中,我们使用filter.exclude.get关键词加上field+__+condition作为关键词去查询,现在我们就来介绍一下这里的condition: 注:查询原生SQL语句: 1.在q

Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询

Lucene在6.0版本之后彻底废除了Filter的使用,采用BooleanQuery来实现Filter的功能,核心代码如下: TermQuery termQuery = new TermQuery(new Term("content","长")); TermQuery termQuery1 = new TermQuery(new Term("content","格")); BooleanQuery.Builder build

ELK学习总结(3-2)elk的filter查询过滤

和一般查询比较,filter查询能够缓存数据,应该尽可能使用 建立测试数据 查看测试数据 1.filtered查询 GET /store/products/_search { "query":{ "filtered":{ "query": { "match_all":{} }, filter:{ "terms":{ "price":[10,20] } } } } } ## 调用没有得到结

Django分页和查询参数的问题

查询是通过get的方式,之前没有分页之前,url是这样的: http://hostname/search?query=port%3A8080 那么我的想法是如果分页了. 1,不带page参数了.next之后就加载下一页的内容 http://hostname/search?query=port%3A8080 请问这个是通过post传参吗? 2,使用官方文档中的(目前的方案) http://hostname/search?query=port%3A8080?page=2 但是,在现实情况下.?pag

models.Book.object.get()与models.Book.object.filter()区别

---恢复内容开始--- 1.models.Book.object.get() 1.返回的是models对象,只能检索出一条记录,如果多于一条记录,或者没有记录都会报错. 2.可以调用delete()方法 3.不可以调用update()方法 2.models.Book.object.filter() 1.返回queryset对象 2.可返回多条或者0条记录  不会报错 3.可以调用update()和delete()方法 ---恢复内容结束--- 原文地址:https://www.cnblogs.

Django 的数据库查询

class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __unicode__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() def __unicode__(self