如果Django不使用“延迟查询执行”原则,主要问题是什么?
q = Entry.objects.filter(headline__startswith="What")
q = q.filter(pub_date__lte=datetime.date.today())
q = q.exclude(body_text__icontains="food")
print(q)
当 print(q) 执行时,它会访问数据库。
最佳答案
可能会发生一些问题,
如果 django 通过
q = Entry.objects.filter(headline__startswith="What")
命中,那么它必须需要将 QueryDict 存储到 q 中。出于这个简单的原因,它带来了一些大问题,例如数据类型、内存、时间复杂度 bla bla bla :(在那之后,您将无法获得那个很棒的功能
q.filter(.....)
。因为当时已经有 value 所以,它不是一个可能的架构。但现在它正在存储对象,而且变量的行为也像一个对象。
关于Django "lazy query execution"原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827674/