django 中QuerySet特性功能详解
作者:谷子的 发布时间:2021-09-29 17:48:14
标签:django,queryset,特性
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


猜你喜欢
- 不能将 SQL Server 2000 日志传送配置升级到 SQL Server 2008。数据库维护计划向导是 SQL Server 20
- 按照ant design vue官方说明,使用日期选择器需要在入口文件(main.js)全局设置语言:// 默认语言为 en-US,如果你需
- 京东购物车抢购商品1.Python的下载和安装这里由于我们代码是基于Python来执行的所以我们这里需要2个东西:一个是Python本身,另
- 支持聚合函数的方法:提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就
- 【基本介绍】【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))【说明】:实现将指定字段的字段值转换为列
- 本文为大家分享了python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下Github:Tetris代码:# -*- coding:
- mtx文件是按照稀疏矩阵格式存储的矩阵数据,可以按照以下步骤读取:1、安装scanpy包pip install scanpy2、文件读取im
- Data URIData URI是由RFC 2397定义的一种把小文件直接嵌入文档的方案。通过如下语法就可以把小文件变成指定编码直接嵌入到页
- 用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容-&g
- 1. 使用函数 np.random.random由于 np.random.random() 默认生成 0~1 之间的小数,因此需要转换一下如
- 本文实例讲述了python常见数制转换用法。分享给大家供大家参考。具体分析如下:1.进位制度Python中二进制是以0b开头的:例如: 0b
- 网页广告 Banner 设计图文手册:采用以下要点来改善你的BANNER。广告并不便宜。 确信你的广告被第一时间读到。使用像这样的Sans
- 本文实例讲述了JavaScript实现解析INI文件内容的方法。分享给大家供大家参考,具体如下:.ini 是Initialization F
- 相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题。JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作
- 今天发现了一个显示ORACLE语法的好网站。内容太多,就不一一摘录了,记在这里,也方便自己查找。http://ss64.com/ora/ 目
- 一个网站程序,在添加新闻时出现错误以下是错误提示: Microsoft OLE DB Provide
- 有这样一个经历,服务器挂掉了,请工程师维护,为了安全,工程师进行核心操作时,直接关掉显示器进行操作,完成后,再打开显示器,进行收尾工作...
- 本文是从百度百科中摘录出来的,asp在it中还有Application Service Provider,也就是应用服务供应商的意思。概述A
- HTML被直接硬编码在 Python 代码之中。def current_datetime(request): now = dat
- 1、概述Golang是一种强类型语言,虽然在代码中经常看到i:=12这种写法,这其实是编译器在编译期间自动做了类型推断。编译器会对数据进行类