在多个类似对象上进行相同查询时减少数据库访问

时间:2017-07-02 21:56:17

标签: python django database django-models

我在其中一个观点中有操作

order_details = [order.get_order_details() for order in orders]

现在order.get_order_details()运行一个数据库查询。所以对于目前的情况。根据{{​​1}}的大小,数据库访问的数量将是巨大的。

在使用缓存之前,还有什么可以加快速度吗?

是否可以将所有选择操作合并为一个数据库操作?

使用orders使其成为原子事务会增加任何性能吗?因为从技术上讲,查询将立即发送而不是单独发送,对吧?

编辑:是否有任何设计更改/模式可以避免这种情况?

编辑:

transaction.atomic()

1 个答案:

答案 0 :(得分:1)

假设ordersQuerySet,例如Order.objects.filter(...)的结果,添加:

.prefetch_related(Prefetch('item_set'))

到查询结束。然后使用:

items = self.item_set
get_order_details中的

请参阅此处的文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/#prefetch-related