从Django中的DB获取某些元素

时间:2012-01-23 12:06:38

标签: python sql django

我有一个简单的Python / Django类:

class myModel(models.Model):
    date = models.DateTimeField()
    value = models.IntegerField()

我希望从我的数据库中获取两个元素。首先是最新的元素,第二个是最新的元素。所以我可以这样做:

myModel.objects.all().order_by('-date')[:1][0]
myModel.objects.filter(value__gte = 0).order_by('-date')[:1][0]

最后注意那些[:1][0] - 这是因为我想最大限度地利用数据库sql引擎。问题是我仍然需要两个查询,我想将它组合成一个查询(最后会像[:2]那样产生我想要的结果)。我知道Django的Q,但无法弄清楚如何在这种情况下使用它。也许一些原始的SQL?我在等待想法。 :)

2 个答案:

答案 0 :(得分:2)

这看起来像对我来说过早优化。两个查询而不是一个真的那么糟糕吗?目前,任何了解Django ORM的人都可以理解您的两个查询。在您用一些时髦的原始SQL替换它之后,情况可能并非如此。

您应该使用[0]代替[:1][0]。 Django知道如何有效地对查询集进行切片 - 两个查询都会产生完全相同的SQL。

答案 1 :(得分:1)

这并没有完全回答你的问题,但你可以使用latest QuerySet method删除那些[:1][0]order_by,它将使用参数返回QuerySet中的最新元素作为日期字段提供。