django如何使用对数据库作all()的一次查询?
澳门美高梅官网
澳门美高梅官网
当前位置 : 澳门美高梅官网 > 澳门美高梅在线赌博

django如何使用对数据库作all()的一次查询?

django中如果

querys = x for x in QuerySet.objects.all
for query in querys:
    print query

这种情况下对数据库需要做几次查询?如果每次都要查询的话,效率太低了
如果不是一次的话,怎样修改代码使其只对数据库做一次查询就可以讲所有数据放在缓存,然后进行输出

不知道有没有理解对你的需求,可以使用rest_framework的序列化工具,代码如下:

from rest_framework import serializers

#定义一个model
class Personalmodels.Model:
    name = models.CharFieldverbose_name=u名称, max_length=20
    age= models.SmallIntegerFieldverbose_name=u年龄

#定义序列化
class PersonalSerializerserializers.ModelSerializer:
    class Meta:
        model = Personal
#使用
serializers = PersonalSerializerPersonal.objects.all, many=True
datas = serializers.data #datas就是类似这样的: [{name: aaa, age: 1}, {name: bbb, age: 2}, ...]

你这个代码是只执行一次查询的,不过你的代码和下面的代码是一样的,没必要多写一次

for query in QuerySet.objects.all:
    print query

或者

querys = QuerySet.objects.all
for query in querys:
    print query

django的query会一些缓存而且只有你做某些操作的时候才会hit数据库

操作包括:切片,取某个值,遍历等

例如:

querys = SomeTings.objects.all # 此时并不触发数据库
b = querys.filterfiled1=xxx # 不触发+1

for i in querys:
    print i # 触发
    
for i in querys:
    print i # 不触发,因为上个遍历时以缓存
   
list1 = querys[:2] # 触发
list1 = query2[:2] # 触发,切片并不缓存

object1 = querys[2] # 触发
object1 = querys[2] # 触发,列表取值不缓存
    
c = querys.filterfiled1=xxx # 不触发,虽然此时querys已经缓存,但是链式查询是一个新的QuerySet对象,并不触发数据
    

广告位

澳门美高梅官网