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 相关文章推荐
Python内置数据类型详解
Aug 18 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
python ubplot使用方法解析
Jan 10 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
python 如何设置守护进程
Oct 29 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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 什么是PEAR?(第二篇)
2009/03/19 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
AngularJS入门之动画
2016/07/27 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
JS回调函数深入理解
2019/10/16 Javascript
Python多进程机制实例详解
2015/07/02 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python Django的web开发实例(入门)
2019/07/31 Python
Python3 集合set入门基础
2020/02/10 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
laravel使用redis队列实例讲解
2021/03/23 PHP
爱岗敬业演讲稿范文
2014/01/14 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
营销与策划实训报告
2014/11/05 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Python实现列表拼接和去重的三种方式
2021/07/02 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
解决 redis 无法远程连接
2022/05/15 Redis
Oracle锁表解决方法的详细记录
2022/06/05 Oracle