Django hızlı bir queryset gelen ilk nesneyi almak için bir yol?
Genellikle, eÄŸer herhangi bir deÄŸilse orada Django bir queryset gelen ilk nesneyi almak ya da None
dönmek için kendimi yetersiz buluyorum. Bütün iş bunu yapmak için birçok yolu vardır. Ama en ölçülebilir olan merak ediyorum.
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
Bu iki veritabanı aramaları sonucu mu? Bu savurgan görünüyor. Bu daha hızlı olur?
qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
return qs[0]
else:
return None
Başka bir seçenek olacaktır:
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
Bu iyi olan tek bir veritabanı arama, üretir. Ama bir istisna oluşturma yapmak için yoğun bellek çok bir şey olduğu zaman, bir sürü nesne gerektirir, neden önemsiz bir zaman-test.
Nasıl özel nesneler ile bellek çalkalama olmadan sadece tek bir veritabanı arama ile bunu yapabilir miyim?
CEVAP
Django 1.6 (released Nov 2013) ortaya çıkan durum Kırlangıç ve eğer queryset hiçbir nesne döndürürse None
döndürmek* first()
*11 ve last()
tanıttı.
Πdeğerini almak için en hızlı yolu ne...
Nasıl bir JQuery Seçici gelen bir DOM ...
Nasıl YA durumda queryset gerçekleştir...
Nasıl dize gelen ilk 5 karakter almak ...
Nasıl alan'Django kimliği s formu...