Model.objects.filter(foo='bar').first()
Код делает одно и тоже провёл некоторые замеры и 1-ая функция отрабатывает быстрее. Возможно это из-за того что у меня маленькая бд или я хз. В общем, мне интересно ваше мнение по этому вопросу: какой код лучше? И почему вторая функция работает дольше?
P.S.: обе функции отрабатывают в равных условиях, когда такого элемента нету и нужно пройтись по всей бд
Может get более медленный чем filter
нет, такое объяснение не катит. Что именно под капотом происходит?
Посмотри какие Sql запросы происходят просто напросто
чем? Если поле, по которому ты фильтруешь проиндексировано в бд, то перформанс будет один и тот же. тоже самое и с get
https://django.fun/tips/prosmotr-sql-zaprosov-django/
Что значит "чем?"?
я тебе написал чем, это риторический вопрос
get более медлнееый так как в нем вызывается filter, но только в этом ли причина
Ты специально выбиваешь ошибку?
Не, параметр существующий, просто нету в бд такого элемента
Я о том же, не про параметр, а значение
Ну, я рассчитываю на худший случай, когда придётся по всей бд пройтись, в поискам элементам
А если он есть, тоже быстрее?
зачем проходиться по всей бд?)
instance = Model.objects.filter(foo='bar').get()
first так делает?
first скорее всего лимит к запросу забавляет
def first(self): """Return the first object of a query or None if no match is found.""" for obj in (self if self.ordered else self.order_by('pk'))[:1]: eturn obj
А, ещё, вероятно, он сортирует, чтобы взять именно first
тут не в first дело, а в filter и get
instance = Model.objects.filter(foo='bar').get()
Обсуждают сегодня