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

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • FullMag

    FullMag

    15 ŞUBAT 2007
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011