django 中QuerySet特性功能详解

 更新时间:2019年07月25日 10:40:19   作者:谷子的  
这篇文章主要介绍了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
  """

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 浅谈python连续赋值可能引发的错误

    浅谈python连续赋值可能引发的错误

    今天小编就为大家分享一篇浅谈python连续赋值可能引发的错误,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 利用Python3分析sitemap.xml并抓取导出全站链接详解

    利用Python3分析sitemap.xml并抓取导出全站链接详解

    因为最近更换了网址,所以需要在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,于是就想写个脚本直接抓取全站链接并导出,本文详细介绍的是实现的方法及过程,需要的朋友们一起来看看吧。
    2017-07-07
  • Python实现MySql数据库交互的示例

    Python实现MySql数据库交互的示例

    本文主要介绍了Python实现MySql数据库交互的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python使用selenium打开chrome浏览器时带用户登录信息实现过程详解

    python使用selenium打开chrome浏览器时带用户登录信息实现过程详解

    这篇文章主要介绍了python使用selenium打开chrome浏览器时带用户登录信息,本文以实例给大家来展示如何让selenium在打开chrome浏览器的时候带上用户的登录信息,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • Python经典题实战记录之百元买百鸡

    Python经典题实战记录之百元买百鸡

    有一道著名的"百钱买百鸡"问题大家应该都不陌生,这篇文章主要给大家介绍了关于Python经典题实战记录之百元买百鸡的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-12-12
  • 使用OpenCV获取图片连通域数量,并用不同颜色标记函

    使用OpenCV获取图片连通域数量,并用不同颜色标记函

    这篇文章主要介绍了使用OpenCV获取图片连通域数量,并用不同颜色标记函,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 用Python制作灯光秀短视频的思路详解

    用Python制作灯光秀短视频的思路详解

    这篇文章主要介绍了用Python制作灯光秀短视频的思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-04-04
  • 使用openCV去除文字中乱入的线条实例

    使用openCV去除文字中乱入的线条实例

    这篇文章主要介绍了使用openCV去除文字中乱入的线条实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python按键或值对字典进行排序

    Python按键或值对字典进行排序

    这篇文章主要为大家介绍了Python对字典进行排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • python-str,list,set间的转换实例

    python-str,list,set间的转换实例

    今天小编就为大家分享一篇python-str,list,set间的转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论