一 简介:今天学习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之查询的更多相关文章

  1. Django开发之路 二(django的models表查询)

    django的models表查询 一.单表查询 (1) all(): 查询所有结果 # 返回的QuerySet类型 (2) filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 #返 ...

  2. django的models模块查询方法

    假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...

  3. django学习-15.ORM查询方法汇总

    1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...

  4. 八、django学习之分组查询、F查询和Q查询

    分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a ...

  5. 六、Django学习之基于下划线的跨表查询

    六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...

  6. 五、Django学习之基于对象的跨表查询

    五.Django学习之基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置.例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的 ...

  7. Django 学习 之ORM聚合查询分组查询与F查询与Q查询

    一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...

  8. Django学习笔记之Models与ORM操作

    一.ORM增加 from django.db import models class Publisher(models.Model): name = models.CharField(max_leng ...

  9. [Django笔记] models 深入学习

    对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...

随机推荐

  1. BZOJ1895Pku3580 supermemo——非旋转treap

    题目描述 给出一个初始序列fA1;A2;:::Ang,要求你编写程序支持如下操作: 1. ADDxyD:给子序列fAx:::Ayg的每个元素都加上D.例如对f1,2, 3,4,5g执行"AD ...

  2. java 字符串的运算公式直接转计算结果

    // 字符串的运算公式直接转计算结果 public static void main(String[] args) {ScriptEngine se = new ScriptEngineManager ...

  3. 自学Python6.4-内置模块(2)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  4. android第二课:运行你的应用

    如果你按照前面课程创建了 Android 项目,它包含了可以立即运行的 "Hello World"源代码文件. 由两该条件来决定如何运行你的应用:你是否拥有运行着 Android ...

  5. 【转】#pragma pack(push,1)与#pragma pack(1)的区别

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...

  6. 【转】IAR for STM8介绍、下载、安装与注册

    Ⅰ.写在前面 本文讲述的内容是IAR for STM8(EWSTM8)的介绍.下载.安装与注册,其安装.注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客 ...

  7. luogu2865 路障 (dijkstra)

    求次短路,dijkstra时同时记下到某点的最短距离和次短距离即可. #include<cstdio> #include<cstring> #include<algori ...

  8. CAN总线中节点ID相同会怎样?

    CAN-bus网络中原则上不允许两个节点具有相同的ID段,但如果两个节点ID段相同会怎样呢? 实验前,我们首先要对CAN报文的结构组成.仲裁原理有清晰的认识. 一.CAN报文结构 目前使用最广泛的CA ...

  9. android 混淆 与 反编译

    1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...

  10. JAVA实现邮件发送功能(账号注册验证码、账号激活等)

    第一步,导入JAR包,JAR包下载地址[http://pan.baidu.com/s/1kVRvGyF] 如果是Maven,请直接在Pom文件中加入 <dependency> <gr ...