我想知道当我在做查询时什么时候触摸数据库。更确切地说,何时执行查询:
我有个夸格斯dic:
kwargs = {'name__startswith':'somename','color__iexact':'somecolor'}
但仅对于name__startswith
查询,我需要distinct()
。而不是color__iexact
。在
我想,我应该为name__startswith
设置distinct()
循环,如下所示:
然后动态查询:
allthings = Thing.objects.filter(**kwargs)
但这有点不对,我好像在做两件不同的事。。在
如何动态地执行这两个查询?在
可以使用models.Q在django中创建动态查询。在
同时阅读 Constructing Django filter queries dynamically with args and kwargs
django查询集是lazy,因此实际查询不是evaluated until you use the data.
在你实际使用数据之前,不应该进行任何查询。这对于过滤查询非常有用
从docs:
查询集是懒惰的——创建查询集的行为不涉及任何数据库活动。您可以整天将过滤器堆叠在一起,Django在计算QuerySet之前不会实际运行查询。看看这个例子:
^{pr2}$虽然这看起来像是三次数据库命中,但实际上它只在最后一行(print(q))命中数据库一次。一般来说,查询集的结果在您“请求”之前不会从数据库中获取。执行此操作时,将通过访问数据库来计算查询集。有关确切何时进行求值的详细信息,请参见何时对QuerySets求值。在
相关问题 更多 >
编程相关推荐