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)
django查询表记录的十三种方法的更多相关文章
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- spring+hibernate删除单条记录的几种方法
spring+hibernate删除单条记录的几种方法
- oracle中查找和删除重复记录的几种方法总结
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...
- mysql性能优化总结(MySql避免重复插入记录的几种方法)
如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了:(area,age,salary),(area,age).(area)三个索引,这被称为最佳左前缀特性.因此我们在创 ...
- MySql避免重复插入记录的几种方法
本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下 方案一:使用ign ...
- 用django实现redirect的几种方法总结
用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect.1 ...
- SQL Server 数据库查找重复记录的几种方法
http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...
- 从壹开始前后端分离 [.netCore 填坑 ] 三十三║ ⅖ 种方法实现完美跨域
缘起 哈喽大家周四好,趁着大家在团建的时候花一个下午学点儿东西,也是督促大家学习哟,希望大家看到老张的文章,可以有一丢丢的学习动力.不过话说过来,该吃的团建还是要去的,不能学我呀 [ /(ㄒoㄒ)/~ ...
- SQL Server 查询表的记录数(3种方法,推荐第一种)
http://blog.csdn.net/smahorse/article/details/8156483 --SQL Server 查询表的记录数 --one: 使用系统表. SELECT obje ...
随机推荐
- Unity进阶:用AssetBundle和Json做了一个玩家登陆界面
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Java之Exception
Exception这个东西,程序中必须会有的,尽管我们很不乐意看到它,可是从另一个角度考虑,有异常则说明程序有问题,有助于我们及时改正.有的时候程序出错的原因有很多,比如不合法的输入.类型.空指针甚至 ...
- ABAP实现Geohash
前几天群里有人问ABAP有没有Geohash函数,用来帮助SAP存储门店位置.实现对附近门店查找的功能.因为没有查到,所以我动手写了一个. Geohash是什么 Geohash是一种公共域地理编码系统 ...
- NLP(十三) 词义消歧
一个词可能有多个词义 例句 解释 She is my date date: 约会,日期 You have taken too many leaves to skip cleaning leaves i ...
- Mongodb操作2-windows系统安装数据库
1.下载mongodb 本人提供的是64位的下载地址 百度云盘连接 :链接:https://pan.baidu.com/s/1fp6aB5rvLa9dD4q4YysIXQ 提取码:ekr2 并送 ...
- Badboy参数化 - Add Variable(循环使用不同的关键字进行搜索)
参考: http://leafwf.blog.51cto.com/872759/1113716 http://www.51testing.com/html/00/130600-1367743.html ...
- P2467 [SDOI2010]地精部落 DP
传送门:https://www.luogu.org/problemnew/show/P2467 参考与学习:https://www.luogu.org/blog/user55639/solution- ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu Tree and Permutation 找规律+求任意两点的最短路
Tree and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- lightoj 1201 - A Perfect Murder(树形dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1201 题解:简单的树形dp,dp[0][i]表示以i为根结点不傻i的最多有多少 ...
- java hdu A+B for Input-Output Practice (IV)
A+B for Input-Output Practice (IV) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...