Получение определенных элементов из БД в Django - PullRequest
1 голос
/ 23 января 2012

У меня есть простой класс 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 engine. Дело в том, что мне все еще нужны два запроса, и я хочу объединить их в один (что-то вроде [:2] в конце, что даст желаемый результат). Я знаю о Q Джанго, но не могу понять, как использовать его в этом контексте. Может быть, какой-то сырой sql? Я жду идей. :)

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Для меня это выглядит преждевременной оптимизацией. Разве два запроса вместо одного действительно так плохи? На данный момент любой, кто знает ORM Django, может понять ваши два запроса. После того, как вы заменили его на какой-нибудь классный сырой SQL, это может быть не так

Вы должны использовать [0] вместо [:1][0]. Django знает, как эффективно нарезать наборы запросов - оба запроса приведут к одному и тому же SQL.

1 голос
/ 23 января 2012

Это не полностью отвечает на ваш вопрос, но вы можете избавиться от этих [:1][0] и order_by, используя последний метод QuerySet , он вернет последний элемент в QuerySet, используя аргумент предоставляется как поле даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...