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
投稿

猜你喜欢

  • 微信小程序实现二维码生成器

    2024-04-16 10:29:06
  • 举例讲解Python中的死锁、可重入锁和互斥锁

    2023-12-21 07:35:03
  • 对Django的restful用法详解(自带的增删改查)

    2023-11-12 07:45:04
  • 详解如何在Vue3使用<script lang=“ts“ setup>语法糖

    2024-04-27 16:00:29
  • python文件操作的基础详细讲解(write、read、readlines、readline)

    2021-04-05 19:31:44
  • 原生JS实现的简单轮播图功能【适合新手】

    2024-04-27 15:22:44
  • 基于Python手写拼音识别

    2022-10-22 09:24:09
  • Python中常用功能的实现代码分享

    2021-02-25 00:26:08
  • Django实现发送邮件功能

    2021-05-13 10:25:44
  • asp 去掉html中的table正则代码函数

    2011-04-06 10:48:00
  • Access数据库导入Mysql的方法之一

    2023-11-17 12:41:41
  • ASP 一次下载网页中的所有资源

    2008-04-18 13:04:00
  • Python求正态分布曲线下面积实例

    2021-01-28 18:20:07
  • 有关perl正则表达式的一些杂项

    2023-08-08 01:12:11
  • Python代码缩进和测试模块示例详解

    2021-08-31 06:49:10
  • PHP实用函数分享之去除多余的0

    2023-11-15 02:07:59
  • 使用SQL实现车流量的计算的示例代码

    2024-01-21 21:53:13
  • Python反爬虫伪装浏览器进行爬虫

    2023-07-05 22:33:38
  • Python定时任务工具之APScheduler使用方式

    2022-02-02 05:50:51
  • 举例讲解Python面向对象编程中类的继承

    2022-02-09 02:59:14
  • asp之家 网络编程 m.aspxhome.com