queryset中支持链式操作

book=Book.objects.all().order_by('-nid').first()

只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象本身

模糊查询常用的操作

大于、大于等于:

__gt 大于>
__gte 大于等于>=

Student.objects.filter(age__gt=10) // 查询年龄大于10岁的学生
Student.objects.filter(age__gte=10) // 查询年龄大于等于10岁的学生

特别注意:这里的下划线是双下划线,下面将介绍的也都是双下划线。
小于、小于等于:

__lt 小于<
__lte 小于等于<=

Student.objects.filter(age__lt=10) // 查询年龄小于10岁的学生
Student.objects.filter(age__lte=10) // 查询年龄小于等于10岁的学生
like:

__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含,忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
in:

__in

查询年龄在某一范围的学生
Student.objects.filter(age__in=[10, 20, 30])
is null / is not null:

__isnull 判空

Student.objects.filter(name__isnull=True) // 查询用户名为空的学生
Student.objects.filter(name__isnull=False) // 查询用户名不为空的学生
不等于/不包含于:

Student.objects.filter().excute(age=10) // 查询年龄不为10的学生
Student.objects.filter().excute(age__in=[10, 20]) // 查询年龄不在 [10, 20] 的学生
其他常用模糊查询:

__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日

Book.objects.filter(create_time__year=2019, create_time__month=4).all()

如果是mysql数据库settings里面修改    USE_TZ = False

多表连接查询:

class A(models.Model):
    name = models.CharField(u'名称')
 class B(models.Model):
    aa = models.ForeignKey(A)

B.objects.filter(aa__name__contains='searchtitle')#查询B表中外键aa所对应的表中字段name包含searchtitle的B表对象。

查询API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<1all():                  查询所有结果
  
<2filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
  
<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                            如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  
<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
 
<5> order_by(*field):       对查询结果排序  用法:order_by('-price')        DESC 降序
  
<6> reverse():              对查询结果反向排序
  
<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
  
<9> first():                返回第一条记录
  
<10> last():                返回最后一条记录
  
<11> exists():              如果QuerySet包含数据,就返回True,否则返回False         相当于limit 1(用途查询这个表中是否有值)
 
<12> values(*field):        用法:Book.objects.all.values('title','price')  返回值是<queryset[{'title':'aa','pirce':12},{}]
 
<13> values_list(*field):   用法:Book.objects.all.values_list('title','price')  返回值是<queryset[('aa',12),('bb',33)]
<14> distinct():            从返回结果中剔除重复纪录  用法:Book.objects.all.values('title','price').distinct()   
                            错误用法 Book.objects.all.distinct()  因为id不相同,其他相同,无法去重 

Django ORM 查询操作的更多相关文章

  1. Django orm查询操作

    基于双下划线查询切记!!!!正向查询按字段,反向查询按表名的小写 正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询 反向:在Book表里设置关联Obj表,Obj-- ...

  2. Django框架 之 ORM查询操作详解

    Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...

  3. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  4. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  5. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  6. Django ORM models操作

    title: Django ORM models操作 tags: Django --- Django ORM models操作 Django ORM基本操作 一.数据库的创建及增删改查 1 使用类创建 ...

  7. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  8. Django之ORM查询操作详解

    浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Python脚本中调用Django环境 其他操 ...

  9. Django(17)orm查询操作

    前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...

随机推荐

  1. Flutter实战视频-移动电商-30.列表页_商品列表UI界面布局

    30.列表页_商品列表UI界面布局 小程序里面的布局方式 小程序的图片上这里使用的是warp布局,因为首页里面火爆专区,已经用过了warp来布局了. 所以这里我们没有必要再讲一遍,这里我们使用List ...

  2. POJ - 2251 Dungeon Master 多维多方向BFS

    Dungeon Master You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is ...

  3. win10系统,mysql-installer-community-5.7.19.0.msi安装

    1.进入官网找到自己所需的安装包:https://dev.mysql.com/  ,路径:DOWNLOAD-->MYSQL Community Edition(GRL)-->MYSQL o ...

  4. HDU3433 【时间的二分+DP最优解】

    题意: 有n个人,X个任务A,Y个任务B, 给出每个人做A做B的时间,一个人只能在某个时刻做一个工作, 问最短时间完成所有工作. 思路: 二分n个人用的时间,判断最优条件用DP. 可以二分就是因为时间 ...

  5. lightoj1060【康托逆展开】

    可以先看些资料:http://blog.csdn.net/keyboarderqq/article/details/53388936 参考谷巨巨:http://blog.csdn.net/azx736 ...

  6. [Xcode 实际操作]八、网络与多线程-(20)时间控件Timer定时功能

    目录:[Swift]Xcode实际操作 本文将演示时间控件Timer定时功能的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit cl ...

  7. Ajax登陆,使用Spring Security缓存跳转到登陆前的链接

    Spring Security缓存的应用之登陆后跳转到登录前源地址 什么意思? 用户访问网站,打开了一个链接:(origin url)起源链接 请求发送给服务器,服务器判断用户请求了受保护的资源. 由 ...

  8. 笔记-JavaWeb学习之旅5

    CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...

  9. 爬虫—使用Requests

    一,安装 pip install requests 二,基本用法 1.简单示例 import requests res = requests.get('https://www.baidu.com') ...

  10. EasyUI/TopJUI可编辑表格的列根据返回数据判断是使用 combobox 还是 numberbox

    这两天研究了一下topjui的可编辑表格edatagrid,想在每一列的后面根据返回的数据判断是使用 combobox 还是 numberbox,期间遇到了一些坑,下面实现代码,需要的朋友可以参考一下 ...