SORU
25 ŞUBAT 2011, Cuma


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
18 Kasım 2013, PAZARTESİ


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ı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • nigahiga

    nigahiga

    21 Temmuz 2006
  • superflyy88

    superflyy88

    8 ŞUBAT 2009