django学习~models之查询
一 简介:今天学习models查询的一些东西
二 理解概念
Queryset
定义 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet
三 细节学习
一 常用的models函数
.all() 全表
.filter() 过滤
.exclude() 排除
.values() 指定值(字典)
.values_list() 指定值(元组 )
.order_by()排序
.exits() 是否存在
.update() 更新
.delete() 删除
.distinct() 去重
.union()联合
.count() 统计
.create()存储
二 全表查询
userinfo.objects.all().values('username') 返回值 某个字典 类似 [{'username': u'chenc'}, {'username': u'zan'}】
userinfo.objects.all().values_list('username') 返回值 某个元祖 [(u'chenc',), (u'zan',), (u'zhangsan',)] .values_list() 也可以添加多个字段
三 范围查询
models.Tb1.objects.filter(id__lt=10, id__gt=1) 查询 1-10
models.Tb1.objects.filter(id__in=[11, 22, 33]) 查询 in
models.Tb1.objects.exclude(id__in=[11, 22, 33]) 查询 not in
models.Tb1.objects.filter(id__range=[1, 2]) 查询between and
models.Tb1.objects.filter(name='seven').order_by('id') 排序('id') 升序 ('-id') 降序
四 多条件查询
1 链式查询
models.Tb1.objects.filter().filter()
2 传Q对象,构造搜索条件
Q(question__startswith='Who') | Q(question__startswith='What') or关系
Q(question__startswith='Who') ,Q(question__startswith!='What') and关系
注意 1 Q参数必须要在具体值参数之前
News.objects.get(Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),question__startswith='Who')
2 Q对象使用之前要先导入
from django.db.models import Q
推荐使用方案2
五 查询条件构成
models.Tb1.objects.filter(字段名__相应函数=value).函数()
六 get和filter区别
输入参数
get的参数只能是model中定义的那些字段,只支持严格匹配,唯一一条记录
filter的参数可以是字段,也可以是扩展的where查询关键字,如in,like等
返回值
get返回值是一个定义的model对象
filter返回值是一个新的QuerySet对象,然后可以对QuerySet在进行查询返回新的QuerySet对象,支持链式操作
QuerySet一个集合对象,可使用迭代或者遍历,切片等,但是不等于list类型(使用一定要注意)
template
get get.name
filter for i in filter
i.name
endfor
七 总结
通过以上我们知道,熟知两部分相应的函数能使我们快速的进行数据查询,可以参考官方文档
django学习~models之查询的更多相关文章
- Django开发之路 二(django的models表查询)
django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...
- django的models模块查询方法
假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...
- django学习-15.ORM查询方法汇总
1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...
- 八、django学习之分组查询、F查询和Q查询
分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a ...
- 六、Django学习之基于下划线的跨表查询
六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...
- 五、Django学习之基于对象的跨表查询
五.Django学习之基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置.例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的 ...
- Django 学习 之ORM聚合查询分组查询与F查询与Q查询
一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...
- Django学习笔记之Models与ORM操作
一.ORM增加 from django.db import models class Publisher(models.Model): name = models.CharField(max_leng ...
- [Django笔记] models 深入学习
对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...
随机推荐
- 洛谷 P1392 取数
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...
- List泛型集合
List和数组 相同点: 都可以控制元素类型 不同点: List的长度是可变的,所以list比数组更容易掌控 List属性 1.Count 获取集合中实际包含的元素个数 2.Capcity 集合中可以 ...
- POJ3258-River Hopscotch-二分答案
一条河里有一串石头,给出石头间的间距,让你去掉m个石头,使最短间距最大. 二分答案,对于每一种mid,判断要不要删除这块石头.然后逼近答案. #include <cstdio> #incl ...
- Migrate Maven Projects to Java 11
Migrate Maven Projects to Java 11 So you want to migrate to Java 11 but your Maven project is still ...
- 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...
- 自学Linux Shell3.4-文件处理命令touch cp mv rm
点击返回 自学Linux命令行与Shell脚本之路 3.4-文件处理命令touch cp mv rm 1. touch命令 一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将 ...
- JDK源码分析(3)HashMap
JDK版本 HashMap简介 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,Hash ...
- PendingIntent的使用
1, 构造intent Intent mIntent = new Intent("android.intent.action.MAIN"); ComponentName comp ...
- Linux下配置ssh免密远程登录
步骤 使用ssh-keygen生成密钥对 提示要求输入保存的位置,密码等信息.全部使用默认信息即可 使用ssh-copy-id user@host将公钥拷贝到需要免密登录的服务器的账户中. 例如,需要 ...
- redis访问安全加固
目录 redis漏洞 入侵特征 安全隐患 redis安全规范 禁止root用户启动 限制redis文件目录访问权限 开启密码认证,设置复杂密码 禁用或重命名危险命令 设置允许监听地址,不要使用0.0. ...