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(models.Model):
    aa = models.ForeignKey(A,related_name="NM")    
bb = models.CharField(u‘名称‘)

查A: A.objects.filter(NM__bb=‘XXXX‘),都知道related_name的作用,A.NM.all()是一组以A为外键的 B实例,可前面这样的用法是查询出所有(B.aa=A且B.bb=XXXX)的A实例,然后还可以通过__各种关系查找。

3.条件选取querySet的时候,filter表示=,exclude表示!=。

querySet.distinct()    去重复

__exact    精确等于 like ‘aa‘

__iexact    精确等于,忽略大小写 ilike ‘aa‘

__contains    包含 like ‘%aa%‘

__icontains    包含,忽略大小写 ilike ‘%aa%‘,但是对于sqlite来说,contains的作用效果等同与icontains。

__gt    大于

__dte    大于等于

__lt    小于

__lte    小于等于

__in    存在于一个list范围内

__startwith    以...开头

__istartwith    以...开头,忽略大小写

__endswith    以...结尾

__iendswith    以...结尾,忽略大小写

__range    在...范围内

__year    日期字段的年份

__month    日期字段的月份

__day    日期字段的日

__isnull=True/False

例子:

q1 = Entry.objects.filter(headline__startswith="My")
q2 = q1.exclude(pub_date__gte=datetime.date.today())
q3 = q1.filter(pub_date__gte=datetime.date.today())
q = q.filter(pub_date__lte=datetime.date.today())
q = q.exclude(body_text__icontains="food")

q1.filter(pub_date__gte=datetime.date.today())表示为时间>=now

q1.exclude(pub_date__gte=datetime.date.today())表示为<=now

关于缓存:
queryset是有缓存的,a = A.objects.all(),print [i for i in a].第一次执行打印会查询数据库,然后结果会被保存在queryset内置的cache中,再执行print的时候就会取自缓存。很多时候会遇到仅需判断queryset是否为空的情况,可以1. if queryset:pass 2.if queryset.count>0:pass 3.if queryset.exists():pass. 三种方式性能依次提升。当queryset非常巨大时,cache会成为问题。此时可以queryset.iterator(),迭代器的用处就不多说了,根据具体需求情况使用。

时间: 2024-11-05 12:07:12

django model filter查询的相关文章

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

[django]django model的查询和更新

再分享Django系列的另外几篇文章: Django model select的各种用法详解:https://mp.weixin.qq.com/s/JVh4UnS2Tql9gUVaBSoGuA Django model update的各种用法介绍:https://mp.weixin.qq.com/s/B_aNB8Y8snbSVLURONZ4Qg Django配置Celery执行异步任务和定时任务:https://mp.weixin.qq.com/s/lXrp3igYo9W2UuE5Gauysg

Django object filter查询[转]

用PYTHON ,DJANGO 做站,在通常的情况下,需要用到 orM 的查询方法,比如object.filter(tag__contains='keywords').... 在这种情况下,如果你跟踪 sql 语句,你会发现,SQL 语句会生成 select .... like bianry '%keywords%', 如果是这样的语句,在某些情况是下是会出问题的,也就是说查询出来的数据可能会比你预计的少. 如果你用 raw sql 查总数 select count(*) from table

django—model核心查询

查询相关API <1> all():                 查询所有结果 <2> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,                            如果符合筛选条件的对象超过一个或者没有都会抛出错误. <5> exclude(**kwargs):     它包含了与所给筛

django model中get()和filter()方法的区别

django的get()方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错. django的filter()方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[].

Django model与数据库操作对应关系(转)

? Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manager为父类,定义自己的manager,增加表级方法: QuerySet是Manager的方法返回的,是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法. Model是一条记录的类,它的功能很强大,里面包含外键实体等,它的方法都是记录级方法(都是实例方

Django Model数据访问Making queries

创建完Model之后, Django 自动为你提供一套数据库抽象层的API,利用它可以完成创建,提取,更新,删除对象的操作. 以下面的Model为例: class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() # On Python 3: def __str__(self): def __unicode__(self): return self.name class

Django Model笔记

常用数据类型 BooleanField:布尔类型true/false NullBooleanField:相当于设置了null=True的BooleanField IntegerField:整形 CommaSeparatedIntegerField:逗号分隔的整形 CharField:max_length,必填 TextField:None EmailField:None GenericIPAddressField:存储IP地址 URLField:verify_exists(True),检查URL

Django Model 定义语法

Django Model 定义语法 版本:1.7主要来源:https://docs.djangoproject.com/en/1.7/topics/db/models/ 简单用法 from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) 会自动生成SQL: CREA