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创建声明性迷你语言的教程
Apr 13 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
使用requests库制作Python爬虫
Mar 25 Python
python中pika模块问题的深入探究
Oct 13 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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/21 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
vue+canvas实现移动端手写签名
2020/05/21 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python str与repr的区别
2013/03/23 Python
python任务调度实例分析
2015/05/19 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
django数据库自动重连的方法实例
2019/07/21 Python
python实现飞机大战小游戏
2019/11/08 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
争论的故事教学反思
2014/02/06 职场文书
乔迁之喜主持词
2014/03/27 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
小学生春游活动方案
2014/08/20 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技
Python中的socket网络模块介绍
2022/07/23 Python