[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方法正好相反
图片.pngorder_by()方法
根据传递的属性名称进行排序,如果属性前加一个-(负号),则表示倒序排列,否则正序排列
图片.png
values()方法
将查询到的数据转换成字典,保存在列表中
图片.png
查询一条数据
get([condition])查询指定条件的数据,返回0条或者多条都会出现异常
- count()返回查询到的结果的总数
- first()返回查询到的第一条数据
- last()返回查询到的最后一条数据
- exists()判断查询结果中是否包含数据
get()方法
图片.png注意:get方法和filter方法的区别,主要由两点区别
- get获取的是一个对象、而filter获取的是一个列表
- 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
多条件查询Q
使用filter进行多次过滤或者在一个filter中通过都好间隔多个提交。
图片.png
如果是或者的关系,Django为我们提供了一个比较好用的Q,完成多条件的查询,使用Q对象,首先需要引入Q对象,有了 Q 对象后,我们就可以多条件的查询了,不管是并且、或者、非的逻辑都可以完成了。这个就是查询对象 Q。
查询原值对象F
可能需要将一些原有的数据可额能进行操作,如年龄加一。
图片.png
传统的手段,我们需要先查询出这个对象,之后在该对象的age加一,之后在保存这个对象,完成数据的更新,比较麻烦
Django针对这种情况,为大家设计了一个F对象,这个对象可以很快的查询出原有对象的值
返回的 1 表示有一条数据被更新了。F 对象在我们进行 Django 数据查询的时候,能够辅助我们快速取到对象原有的值,方便我们进行各种操作。所以 F 对象是原有值对象。
网友评论