查询操作

[TOC]

查询操作

查询数据的操作一般都是数据操作中比较复杂的一部分,针对不同那个的操作方式进行分类讲解,为了方便进行快速的操作,我们通过Django提供的一个shell测试命令进行处理

进入项目主目录文件夹,运行如下命令进入项目测试命令行
python manager.py shell
此时就进入了sehll环境,我们进行各种操作即可

#引入blog下的models模块
>>> from blog import models
#添加一个新用户
>>> user = models.User(name='test',nickname='test',age=23)
#进行保存
>>> user.save()

这样就增加了一条数据,如果要删除,则调用删除方法

>>> user.delete()
(1,{'blog.Article':0,'blog.User':1})

查询多条数据

  • all()查询全部数据
  • filter([condition])查询指定条件数据,如果没有指定条件,等同于all()
  • exclude([condition])查询指定条件之外的数据,如果没有指定条件,等同于all()
  • order_by()根据指定的字段进行排序查询,字段前面添加符号'-'表示倒序
  • values()将查询到的数据转换成字典,保存在列表中返回

all的使用

>>> models.User.objects
<django.db.models.manager.Manager object at 0x000000003C759E8>
>>> users = models.User.objects
>>> all = users.all()
>>> all
#返回所有的用户信息
<QuerySet [<User:User object>,<User:User object>,<User:User object>]>
#查询第一个用户的用户名
>>> all[0].name
'zhengyuchao'
>>>for u in all:
...     print(u.name,u.nickname,u.age)
...
zhengyuchao 郑玉超 23
yaojuan 大娟 23

all方法返回所有数据,相当于查询所有数据。注意返回的是一个QuerySet的查询集合,如果需要取值,则需要通过下标索引查找

filter方法获取符合条件的QuerySet

图片.png

大部分情况来说pk和id是一样的,我们知道pk代表primary key的缩写,也就是任何model中都有的主键,那么id呢,大部分时候也是model的主键,所以在这个时候我们可以认为pk和id是完全一样的。

exclude方法查找条件不符合的,和filter方法正好相反

图片.png

order_by()方法

根据传递的属性名称进行排序,如果属性前加一个-(负号),则表示倒序排列,否则正序排列

图片.png

values()方法

将查询到的数据转换成字典,保存在列表中

图片.png

查询一条数据

get([condition])查询指定条件的数据,返回0条或者多条都会出现异常

  • count()返回查询到的结果的总数
  • first()返回查询到的第一条数据
  • last()返回查询到的最后一条数据
  • exists()判断查询结果中是否包含数据

get()方法

图片.png

注意:get方法和filter方法的区别,主要由两点区别

  1. get获取的是一个对象、而filter获取的是一个列表
  2. get如果获取不到值(没有条件符合),则报错,而filtr会返回一个空列表

count()方法

count方法,返回符合条件的数量。

图片.png

first方法和last方法

返回符合条件的第一条和最后一条

图片.png

exists()方法

判断符合条件的数据是否存在

图片.png

条件查询

  • 相等条件查询 key=value
  • 包含条件查询 key_contains=value:模糊查询like
  • 开头结尾查询 key__startswith key__endswith=value
  • 是否为空查询 key__isnull=True key__isnotnull=True
  • 范围查询 key__in=[1,2,3,4,5,6,7]
  • 关系查询
    • key__gt=1 大于1
    • key__gte=1 大于等于1
    • key__ly=1 小于1
    • key__lte=1 小于等于1
    • 日期查询[year/month/day/week_day/hour/minute/second]
    • key__year=2014


      图片.png

      图片.png

多条件查询Q

使用filter进行多次过滤或者在一个filter中通过都好间隔多个提交。

图片.png

如果是或者的关系,Django为我们提供了一个比较好用的Q,完成多条件的查询,使用Q对象,首先需要引入Q对象,有了 Q 对象后,我们就可以多条件的查询了,不管是并且、或者、非的逻辑都可以完成了。这个就是查询对象 Q。

图片.png

查询原值对象F

可能需要将一些原有的数据可额能进行操作,如年龄加一。

图片.png

传统的手段,我们需要先查询出这个对象,之后在该对象的age加一,之后在保存这个对象,完成数据的更新,比较麻烦
Django针对这种情况,为大家设计了一个F对象,这个对象可以很快的查询出原有对象的值

图片.png

返回的 1 表示有一条数据被更新了。F 对象在我们进行 Django 数据查询的时候,能够辅助我们快速取到对象原有的值,方便我们进行各种操作。所以 F 对象是原有值对象。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容