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读取Android permission文件
Nov 01 Python
python列表去重的二种方法
Feb 14 Python
Python中文编码那些事
Jun 25 Python
Python中super关键字用法实例分析
May 28 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
pytorch训练imagenet分类的方法
Jul 27 Python
python中正则表达式与模式匹配
May 07 Python
python 创建一维的0向量实例
Dec 02 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
Apr 01 Python
python分布式爬虫中消息队列知识点详解
Nov 26 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根据年月获取季度的方法
2014/03/31 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python 复平面绘图实例
2019/11/21 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
DELPHI面试题研发笔试试卷
2015/11/08 面试题
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
商场消防演习方案
2014/02/12 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
如何写辞职书
2015/02/26 职场文书
公司禁烟通知
2015/04/23 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers