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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
django模板结构优化的方法
Feb 28 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
python3.8下载及安装步骤详解
Jan 15 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Python参数传递及收集机制原理解析
Jun 05 Python
Python学习之time模块的基本使用
Jan 17 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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
第十节--抽象方法和抽象类
2006/11/16 PHP
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
Python 实现链表实例代码
2017/04/07 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
Python 编程速成(推荐)
2019/04/15 Python
wxPython实现带颜色的进度条
2019/11/19 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
教师党性分析材料
2014/02/04 职场文书
大学生党员承诺书
2014/05/20 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
毕业生评语大全
2015/01/04 职场文书
毕业生对母校寄语
2015/02/26 职场文书
面试通知短信
2015/04/20 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
Linux安装apache服务器的配置过程
2021/11/27 Servers