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)

转载于:https://www.cnblogs.com/alex3174/p/11608374.html

django查询表记录的十三种方法相关推荐

  1. java中批次号_在一个批次中插入多笔记录的几种方法

    插入数据库方法很多,下面Insus.NET列举几种方法,看看你常用的是哪一种: 创建一张表: CREATE TABLE [dbo].[Network_Info] ( [ID] INT NOT NULL ...

  2. Django版本查看的N种方法

                      Django版本查看的N种方法 Django是干什么的不用解释了,大概说下,是个重量级的使用Python 进行web快速开发的框架,也就是说该框架功能齐全,基本不需 ...

  3. 用SQL删除重复记录的N种方法

    例如:    id           name         value    1               a                 pp    2               a  ...

  4. python中redirect_详解如何用django实现redirect的几种方法总结

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

  5. 批量删除记录的两种方法

    如果需要对数据记录进行批量删除,可借鉴使用如下方法: 将复选框的value设为表ID,递交后: 程序代码 conn.execute("delete from yourtable where  ...

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

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

  7. Xslt取节点集的指定位置记录的三种方法

    如果我们在一个Xml中有N个子结点,我们希望取得其中的指定位置的节点,我们应该怎么做呢?我们有三种方法可以实现这个功能. Xml如下: <?xml version="1.0" ...

  8. mysql删除重复的判断_MySQL中查询、删除重复记录一共有多少种方法?

    前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...

  9. SQL Server遍历表中记录的2种方法

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...

最新文章

  1. 基于对应点的6D姿态识别
  2. python 百度地图api热力图_【热力图】区域地图热力图,百度地图api
  3. 71.数据模型有哪几种?特征?
  4. [总结]vue开发常见知识点及问题资料整理(持续更新)
  5. Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
  6. 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
  7. SQL Server 2014如何提升非在线的在线操作
  8. ubuntu和centos 编译安装nginx及常用命令
  9. 自动驾驶公司Momenta完成B2轮融资,凯辉领投GGV跟投
  10. 惰性函数定义模式 网页设计
  11. 地图导航软件测试大乐,敢问路在何方?四款手机地图软件横向测评!
  12. 《罪恶街区/Vice Street》手游用户协议
  13. NOI模拟(5.14) JSOID1T3 绝地反击 (bzoj5316)
  14. My Fifty-First Page - 组合总和 - By Nicolas
  15. Spring Event 事件发布/监听机制 详解并使用
  16. 度秘语音引擎app_语音引擎下载
  17. 深入浅出解析变分法——一种常用的数学方法
  18. STM32理论 —— DAC、DMA
  19. CSS - 盒子模型 - 外边距
  20. Eclipse CDT+Qemu调试Linux 0.11内核

热门文章

  1. 程序员修炼之道-笔记
  2. mybatis-spring 项目简介
  3. Java坦克大战 (一) 之产生一个窗口
  4. 斯坦福大学公开课:iPhone开发教程2010年冬
  5. 家园签到:无忧币天天送,连续领礼更多!【家园帮助】
  6. 设计模式之---Factory
  7. 计算机的起源英语作文,冰箱的起源英语作文
  8. 学计算机怎么收费呢,学计算机怎么收费服务为先_贵阳经济技术学校
  9. 【Python-ML】SKlearn库多项式回归
  10. 【Python学习系列四】Python程序通过hadoop-streaming提交到Hadoop集群执行MapReduce