django查询表记录的十三种方法

all() 结果为queryset类型

>>> models.Book.objects.all()
<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>

filter() 条件查询(它下面也有很多种方法,见最下面)

>>> ret = models.Book.objects.filter(id=5)
>>> ret
<QuerySet [<Book: Book object>]>

get() 得到的是一个model对象,有且只能有一个

会出现两种报错

  • 1 查不到数据会报错 :Book matching query does not exist.
  • 2 返回值超过一个就报错 :returned more than one Book -- it returned 13!
>>> ret = models.Book.objects.get(id=5)
>>> ret
<Book: Book object>

exclude() 排除

  1. object能够调用,models.Book.objects.exclude(book_name__startswith='活')
  2. queryset类型数据能够调用。
>>> ret = models.Book.objects.all()
>>> ret.exclude(id=5)
<QuerySet [<Book: Book object>, <Book: Book object>]>

order_by() 排序

models.Book.objects.all().order_by('-price','id')
#类似于mysql种的order by price desc,id asc;

reverse() 反转

models.Book.objects.all().order_by('id').reverse()
# 数据排序之后才能反转

count() 计数,统计返回结果的数量

>>> ret = models.Book.objects.all().count()
>>> ret
3

first() 返回第一条数据,结果是model对象类型

>>> ret = models.Book.objects.all()
>>> ret.first()
<Book: Book object>
>>> ret.first().id
5

last() 返回最后一条数据,结果是model对象类型

>>> ret = models.Book.objects.all()
>>> ret.last()
<Book: Book object>
>>> ret.last().id
11

exists() 判断返回结果集是不是有数据

>>> ret = models.Book.objects.filter(id=999).exists()
>>> ret
False
>>> ret = models.Book.objects.filter(id=11).exists()
>>> ret
True

values() (返回的queryset,里面是字典类型数据)

>>> ret = models.Book.objects.all().values('id','book_name')
>>> ret
<QuerySet [{'id': 5, 'book_name': '1'}, {'id': 6, 'book_name': '2'}, {'id': 11, 'book_name': '23'}]>

values_list(返回的queryset,里面是数组类型数据)

>>> ret = models.Book.objects.all().values_list('id','book_name')
>>> ret
<QuerySet [(5, '1'), (6, '2'), (11, '23')]>

调用values或者values_list的是objects控制器,那么返回所有数据


>>> ret = models.Book.objects.values()
>>> ret
<QuerySet [
{'id': 5, 'book_name': '1', 'price': 2.0, 'shijian': '2018-03-22', 'press': 'admin'},
{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'},
{'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'}
]>

distinct() 去重,配置values和values_list来使用

>>> models.Book.objects.all().values('book_name').distinct()
<QuerySet [{'book_name': '1'}, {'book_name': '2'}, {'book_name': '23'}]>

filter双下划线查询

__in price值等于这三个里面的任意一个的对象

Book.objects.filter(price__in=[100,200,300])

__gt 大于

>>> ret = models.Book.objects.filter(price__gt=1233)
>>> ret.values()
<QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}]>

__gte大于等于

>>> ret = models.Book.objects.filter(price__gte=2)
>>> ret.count()
3

lt 等于

>>> ret = models.Book.objects.filter(price__lt=1234)
>>> ret.count()
2

lte 小于等于

>>> ret = models.Book.objects.filter(price__lte=1234)
>>> ret.count()
3

__range 大于等于35,小于等于38

>>>ret = models.Book.objects.filter(price__range=[35,38])
>>>ret.count()
3

__contains 包含这个字符串的数据

>>> ret = models.Book.objects.filter(book_name__contains='2')
>>> ret.values()
<QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}, {'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'}]>

__icontains 不区分大小写

ret = models.Book.objects.filter(book_name__icontains='py')

__startswith 以什么开头 -- endswith(以什么结尾) -- istartswith(不区分大小写)

>>> ret = models.Book.objects.filter(book_name__startswith='2')
>>> ret.values()
<QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}, {'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'}]>

__year 查询年 __month

ret = models.Book.objects.filter(publish_date__year='2018')

__isnull 字段值为空的数据

models.Book.objects.filter(publish_date__isnull=True)

django查询表记录的十三种方法的更多相关文章

  1. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  2. spring+hibernate删除单条记录的几种方法

    spring+hibernate删除单条记录的几种方法

  3. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

  4. mysql性能优化总结(MySql避免重复插入记录的几种方法)

    如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了:(area,age,salary),(area,age).(area)三个索引,这被称为最佳左前缀特性.因此我们在创 ...

  5. MySql避免重复插入记录的几种方法

    本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下 方案一:使用ign ...

  6. 用django实现redirect的几种方法总结

    用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect.1 ...

  7. SQL Server 数据库查找重复记录的几种方法

    http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...

  8. 从壹开始前后端分离 [.netCore 填坑 ] 三十三║ ⅖ 种方法实现完美跨域

    缘起 哈喽大家周四好,趁着大家在团建的时候花一个下午学点儿东西,也是督促大家学习哟,希望大家看到老张的文章,可以有一丢丢的学习动力.不过话说过来,该吃的团建还是要去的,不能学我呀 [ /(ㄒoㄒ)/~ ...

  9. SQL Server 查询表的记录数(3种方法,推荐第一种)

    http://blog.csdn.net/smahorse/article/details/8156483 --SQL Server 查询表的记录数 --one: 使用系统表. SELECT obje ...

随机推荐

  1. Egret白鹭开发微信小游戏排行榜功能

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 最近事情特别多,今天终于实现了排行榜功能,记录下来大家一起学习学习. 一.调用默认排行榜 首先我们需要了解: 1.白鹭开 ...

  2. 终于跑通分布式事务框架tcc-transaction的示例项目

    1.背景 前段时间在看项目代码的时候,发现有些接口的流程比较长,在各个服务里面都有通过数据库事务保证数据的一致性,但是在上游的controller层并没有对一致性做保证. 网上查了下,还没找到基于Go ...

  3. 在 react 项目里如何配合immutable在redux中使用

    一.reducer文件的处理 先安装 immutable 与 redux-immutable yarn add immutable redux-immutable 我们可能会在很多地方定义子树,这就需 ...

  4. 一个手写的Vue放大镜,复制即可使用

    一个手写的vue放大镜 组件使用less,请确保已安装loader 本组件为放大镜组件,传参列表为: width: 必传,设置放大镜的宽高(正方形),放大区域等同,放大倍数为2倍 picList:必传 ...

  5. java学习之String类

    标签(空格分隔): String类 String 的概述 class StringDemo{ public static void main(String[] args){ String s1=&qu ...

  6. 消息中间件——RabbitMQ(九)RabbitMQ整合Spring AMQP实战!(全)

    前言 1. AMQP 核心组件 RabbitAdmin SpringAMQP声明 RabbitTemplate SimpleMessageListenerContainer MessageListen ...

  7. 模式匹配和正则表达式_python

    模式匹配和正则表达式的学习 python实现 正则表达式 其对文字处理有着超高的效率 利用正则表达式可以实现"三步解决一个问题" 步骤 1.用 import re 导入正则表达式模 ...

  8. Codeforces Round #506 (Div. 3) 1029 D. Concatenated Multiples

    题意: 给定n个数字,和一个模数k,从中选出两个数,直接拼接,问拼接成的数字是k的倍数的组合有多少个. 思路: 对于a,b两个数,假定len = length of (b),那么a,b满足条件就是a ...

  9. CodeForces 590C Three States BFS

    Three Statesy 题解: 以3个大陆为起点,都dfs一遍,求出该大陆到其他点的最小距离是多少, 然后枚举每个点作为3个大陆的路径交点. 代码: #include<bits/stdc++ ...

  10. 基于单细胞测序数据构建细胞状态转换轨迹(cell trajectory)方法总结

    细胞状态转换轨迹构建示意图(Trapnell et al. Nature Biotechnology, 2014) 在各种生物系统中,细胞都会展现出一系列的不同状态(如基因表达的动态变化等),这些状态 ...