django 中QuerySet特性功能详解

作者:谷子的 时间:2021-09-29 17:48:14 

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
 """

来源:https://www.cnblogs.com/gyh04541/p/7920660.html

标签:django,queryset,特性
0
投稿

猜你喜欢

  • Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度

    2023-09-18 23:32:01
  • Tensorflow 多线程设置方式

    2021-09-29 21:53:50
  • python高级语法之闭包和装饰器详解

    2021-09-19 18:28:55
  • SQL重复记录处理(查找,过滤,删除)

    2008-11-17 20:47:00
  • Python内置方法和属性应用:反射和单例(推荐)

    2022-08-04 03:23:48
  • 二级域名原理以及asp实现程序

    2007-08-03 13:08:00
  • 使用Python解决常见格式图像读取nii,dicom,mhd

    2021-11-14 23:36:59
  • ThinkPHP3.1.3版本新特性概述

    2023-09-28 15:25:11
  • python如何让类支持比较运算

    2022-07-07 13:02:52
  • Flask之flask-script模块使用

    2022-02-18 11:01:13
  • asp从Excel中筛选符合条件的记录保存至新的Excel中

    2007-09-06 19:20:00
  • Python标准库之随机数 (math包、random包)介绍

    2021-09-26 11:57:08
  • 原生JS实现Ajax通过POST方式与PHP进行交互的方法示例

    2023-09-07 22:44:41
  • 列表模块是否需要标题

    2009-06-25 14:11:00
  • 详解Python装饰器

    2023-11-12 12:40:06
  • 如何使用Python的OpenCV库处理图像和视频

    2022-09-06 10:22:12
  • Mootools常用方法扩展(五)

    2009-03-03 12:12:00
  • 利用Python抢回在蚂蚁森林逝去的能量(实现代码)

    2022-07-01 15:15:39
  • python根据京东商品url获取产品价格

    2022-01-26 12:14:31
  • Dreamweaver使用技巧之如何巧用DW4文件库更新网站

    2010-10-20 20:07:00
  • asp之家 网络编程 m.aspxhome.com