django查询表记录的十三种方法
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() 排除
- object能够调用,models.Book.objects.exclude(book_name__startswith='活')
- 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)
转载于:https://www.cnblogs.com/alex3174/p/11608374.html
django查询表记录的十三种方法相关推荐
- java中批次号_在一个批次中插入多笔记录的几种方法
插入数据库方法很多,下面Insus.NET列举几种方法,看看你常用的是哪一种: 创建一张表: CREATE TABLE [dbo].[Network_Info] ( [ID] INT NOT NULL ...
- Django版本查看的N种方法
Django版本查看的N种方法 Django是干什么的不用解释了,大概说下,是个重量级的使用Python 进行web快速开发的框架,也就是说该框架功能齐全,基本不需 ...
- 用SQL删除重复记录的N种方法
例如: id name value 1 a pp 2 a ...
- python中redirect_详解如何用django实现redirect的几种方法总结
用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect. ...
- 批量删除记录的两种方法
如果需要对数据记录进行批量删除,可借鉴使用如下方法: 将复选框的value设为表ID,递交后: 程序代码 conn.execute("delete from yourtable where ...
- SQL Server 数据库查找重复记录的几种方法
http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...
- Xslt取节点集的指定位置记录的三种方法
如果我们在一个Xml中有N个子结点,我们希望取得其中的指定位置的节点,我们应该怎么做呢?我们有三种方法可以实现这个功能. Xml如下: <?xml version="1.0" ...
- mysql删除重复的判断_MySQL中查询、删除重复记录一共有多少种方法?
前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...
- SQL Server遍历表中记录的2种方法
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...
最新文章
- 基于对应点的6D姿态识别
- python 百度地图api热力图_【热力图】区域地图热力图,百度地图api
- 71.数据模型有哪几种?特征?
- [总结]vue开发常见知识点及问题资料整理(持续更新)
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
- SQL Server 2014如何提升非在线的在线操作
- ubuntu和centos 编译安装nginx及常用命令
- 自动驾驶公司Momenta完成B2轮融资,凯辉领投GGV跟投
- 惰性函数定义模式 网页设计
- 地图导航软件测试大乐,敢问路在何方?四款手机地图软件横向测评!
- 《罪恶街区/Vice Street》手游用户协议
- NOI模拟(5.14) JSOID1T3 绝地反击 (bzoj5316)
- My Fifty-First Page - 组合总和 - By Nicolas
- Spring Event 事件发布/监听机制 详解并使用
- 度秘语音引擎app_语音引擎下载
- 深入浅出解析变分法——一种常用的数学方法
- STM32理论 —— DAC、DMA
- CSS - 盒子模型 - 外边距
- Eclipse CDT+Qemu调试Linux 0.11内核