这是一个双重的问题-我对Django还是很陌生。我的应用程序使用Django与MySQL数据库进行接口并将数据提供给ReactJS前端。我正在尝试进行查询,以从某个列值中获取最新的条目(按时间)。例如:
class Cake(models.Model):
bakery = models.CharField(Bakery)
baked_at = models.DateTimeField()
baker = models.ForeignKey(Baker)
buyer = models.ForeignKey(Buyer)
如果我想在一个QuerySet中查找每个给定面包店名称的 all 最新蛋糕,那么运行哪种查询是一个很好的查询?目前我有类似的东西:
subquery = Cake.objects.filter(bakery=OuterRef('bakery')).order_by('-baked_at')
latest_cakes = Cake.objects.filter(baked_at=Subquery(subquery.values('baked_at')[:1]))
我的第二个问题是关于数据库/序列化优化。说,即使我只是序列化所有蛋糕或只是latest_cakes,如果要处理多达10,000个以上的条目,应该如何优化?
答案 0 :(得分:0)
假设结果必须是一个记录(假设在一个baked_at
日期时间仅烘焙了一个蛋糕):
latest_cake = Cake.objects.filter(baker=OuterRef('bakery')).order_by('-baked_at').first()
假设在同一日期时间烘焙了多个蛋糕,那么是的,您首先需要获取日期时间(您的代码在第二个查询集中重新过滤面包店的代码丢失了,否则几乎是相同的):
baked_at = Cake.objects.filter(bakery=OuterRef('bakery')).order_by('-baked_at').first().values('baked_at')
latest_cakes = Cake.objects.filter(bakery=OuterRef('bakery'), baked_at=baked_at)
您是否考虑过使用最近的N个蛋糕,或使用时间范围(一小时内烘烤的最新蛋糕)?
对于第二个问题,您确定需要一次获取所有10k记录吗?如果没有,请考虑using Pagination
。