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
- """
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。