django 中QuerySet特性功能详解


Posted in Python onJuly 25, 2019

Book表的数据显示

id  title  price  publish_id
2  Linux  
30  
 1
3  项塔兰  
45  
 2
4  追风筝的人  39.9   3
5  富爸爸  
23    10

创建queryset 视图 函数, 可以使用的列表的方法,按索引,切片的方法取值,得到一个列表对象

def queryset(request):

  ret1 = Book.objects.all()[0]#QuerySet支持索引,切片操作
  # print(ret1)   #linux 得到一个具体的对象
  ret2 = Book.objects.all()[1:3]
  # print(ret2)#<QuerySet [<Book: 项塔兰>, <Book: 追风筝的人>]>
  # ret3 = Book.objects.all()[:2]
  ret4 = Book.objects.all()[::2]# 按步长取,隔一个取一个,,,[::1}挨着取,一个个都取
  # print(ret3)#<QuerySet [<Book: Linux>, <Book: 项塔兰>]>

  print(ret4)#[<Book: Linux>, <Book: 追风筝的人>]

-----

可迭代特性, iterator() ,exists()

主要是QuerySet的缓存机制,如果一次从数据库取出很多数据,就有可能导致程序崩溃,可以利用iterator()方法,做性能优化,

为了判断获取到的对象是否有值,没有必要遍历所有的对象,用exists()方法()

#可迭代特性

  book_list = Book.objects.all() #取出数据库的所有对象,要考虑cache机制,如果数据量太大,程序就会崩溃

#判断book_list 是否有值,假如有很多数据,就没有必要全部查一遍才得知有数据,只要查到有1条数据,就可以知道book_list有数据,就用exists()方法

if book_list.exists():
  
print('ok')  #ok ,说明数据库有值
 #利用itertor()方法 book_list1 = Book.objects.all().iterator() #这次就不能用2次for循环,第一次for循环,就已经把遍历完了,



book_list1 = Book.objects.all().iterator() #这次就不能用2次for循环,第一次for循环,就已经把遍历完了,用next()方法每次取出一个值,
print(next(book_list1)) #linux
print(next(book_list1))#项塔兰
print(next(book_list1))#追风筝的人




  Book.objects.filter(id=2).update(price=100.00)#对数据库数据进行更新,但并没有执行,只有在用到的时候在执行

  for obj in book_list: # 在for循环时开始执行sql语句查询
    print(obj.title,obj.price)

    #如果for循环2次,打印2次结果,也是执行一次sql语句,因为存在sql的缓存机制,把第一次查询的结果放到缓存里,
    #下次从缓存里调
  """ 
  Linux  30.00  ---没有更新数据之前
  项塔兰  45.00
  追风筝的人  39.90
  富爸爸  23.00
  """

  """
  Linux 100.00  ----更新数据之后
  项塔兰 45.00
  追风筝的人 39.90
  富爸爸 23.00
  """

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
python绘制直线的方法
Jun 30 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python实战购物车项目的实现参考
Feb 20 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
python实现智能语音天气预报
Dec 02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
python3代码中实现加法重载的实例
Dec 03 Python
对Python _取log的几种方式小结
Jul 25 #Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 #Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 #Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 #Python
Python 3.8 新功能全解
Jul 25 #Python
python3.7 的新特性详解
Jul 25 #Python
python issubclass 和 isinstance函数
Jul 25 #Python
You might like
PHP一些有意思的小区别
2006/12/06 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
PHP中常用数组处理方法实例分析
2008/08/30 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
Python中type的构造函数参数含义说明
2015/06/21 Python
python微信公众号开发简单流程
2018/03/23 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
解决Django中多条件查询的问题
2019/07/18 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
python 元组的使用方法
2020/06/09 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
教学个人的自我评价分享
2014/02/16 职场文书
党员四风剖析材料
2014/08/27 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
运动会通讯稿50字
2015/07/20 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
详解SQL报错盲注
2022/07/23 SQL Server