前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三、Django查询表记录

三、Django查询表记录

作者头像
Dreamy.TZK
发布2020-04-09 14:46:45
9120
发布2020-04-09 14:46:45
举报
文章被收录于专栏:小康的自留地小康的自留地

查询接口

all()

查询所有结果,结果是queryset类型

filter(**kwargs)

and条件关系:参数用逗号分割表示and关系

代码语言:javascript
复制
models.Student.objects.filter(id=1,name='dazhuang').update(
    name='大壮禅师',
    age = 78,
)

其中filter的参数也可以通过字典方式传入

代码语言:javascript
复制
odels.Student.objects.filter(**{'id':7,'name':'大壮禅师'}).update(age=100)
models.Student.objects.all().filter(id=7)  #queryset类型可以调用fitler在过滤

get(**kwargs)

返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。

Book.objects.get(id=1)

exclude(**kwargs)

排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作,用这个exclude,返回值是queryset类型 Book.objects.exclude(id=6),返回id不等于6的所有的对象或者在queryset基础上调用

代码语言:javascript
复制
query = models.Student.objects.exclude(id=1)
print(query)
query = models.Student.objects.filter(age=38).exclude(id=6)
print(query)

order_by(*field)

queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型。

代码语言:javascript
复制
models.Book.objects.all().order_by('price','id') 
#直接写price,默认是按照price升序排列,按照字段降序排列,就写个负号就行了order_by('-price'),order_by('price','id')是多条件排序,按照price进行升序,price相同的数据,按照id进行升序

reverse()

queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型

代码语言:javascript
复制
query = models.Student.objects.all().order_by('id').reverse()
print(query)

count()

queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。

first()

queryset类型的数据来调用,返回第一条记录。Book.objects.all()[0] = Book.objects.all().first()得到的都是model对象,不是queryset

last()

queryset类型的数据来调用,返回最后一条记录,结果为model对象类型

exists()

queryset类型的数据来调用,如果QuerySet包含数据,就返回True,否则返回False。

空的queryset类型数据也有布尔值True和False,但是一般不用它来判断数据库里面是不是有数据,如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits。

例:all_books = models.Book.objects.all().exists() #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,就是通过limit 1,取一条来看看是不是有数据

values(*field)

用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。

values_list(*field)

它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

distinct()

values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录,结果还是queryset

代码语言:javascript
复制
query = models.Student.objects.all().values('age').distinct()
print(query)

总结表格

接口名

作用

调用类型

结果类型

all()

查询所有结果

objects

QuerySet

filter

条件查询

objects

QuerySet

get

条件查询,但只返回一条数据

objects

Model(行记录对象)

exclude

匹配非条件的对象

objects

QuerySet

order_by

对查询结果进行排序

QuerySet

QuerySet

reverse

对查询结果反向排序

QuerySet

QuerySet

count

返回匹配查询的对象数量

QuerySet

int

first

返回第一条记录

QuerySet

Model

last

返回最后一条记录

QuerySet

Model

exists

判断QuerySet是否包含数据

QuerySet

bool(True、False)

values

以字典方式返回

QuerySet

ValueQuerySet

values_list

以元组方式返回

QuerySet

dic

distinct

去重

values和values_list得到的queryset类型

queryset

模糊查询

代码语言:javascript
复制
Book.objects.filter(price__in=[100,200,300]) #price值等于这三个里面的任意一个的对象
Book.objects.filter(price__gt=100)  #大于,大于等于是price__gte=100,别写price>100,这种参数不支持
Book.objects.filter(price__lt=100)
Book.objects.filter(price__range=[100,200])  #sql的between and,大于等于100,小于等于200
Book.objects.filter(title__contains="python")  #title值中包含python的
Book.objects.filter(title__icontains="python") #不区分大小写
Book.objects.filter(title__startswith="py") #以什么开头,istartswith  不区分大小写
Book.objects.filter(pub_date__year=2012)

# all_books = models.Book.objects.filter(pub_date__year=2012) #找2012年的所有书籍
    # all_books = models.Book.objects.filter(pub_date__year__gt=2012)#找大于2012年的所有书籍
    all_books = models.Book.objects.filter(pub_date__year=2019,pub_date__month=2)#找2019年月份的所有书籍,如果明明有结果,你却查不出结果,是因为mysql数据库的时区和咱们django的时区不同导致的,了解一下就行了,你需要做的就是将django中的settings配置文件里面的USE_TZ = True改为False,就可以查到结果了,以后这个值就改为False,而且就是因为咱们用的mysql数据库才会有这个问题,其他数据库没有这个问题。

假如说查找的字段为xx

模糊查找类型

表示方法

任意包含某个值

xx__in=[100,200,300

大于某个值

xx__gt=100

小于某个值

xx_lt=100

介于某个值之间

xx_range=[100,200]

包含某个字符

xx_contains=‘python’

不区分大小写

xx_icontains=‘python’

以什么开头

xx_startswith=‘py’

查询某一年

xx_year=2012

大于某一年

xx_year_gt=2012

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查询接口
    • all()
      • filter(**kwargs)
        • get(**kwargs)
          • exclude(**kwargs)
            • order_by(*field)
              • reverse()
                • count()
                  • first()
                    • last()
                      • exists()
                        • values(*field)
                          • values_list(*field)
                            • distinct()
                            • 模糊查询
                            相关产品与服务
                            数据库
                            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档