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

  • MrDevin521

    MrDevin521

    18 Temmuz 2010
  • Rayone GB

    Rayone GB

    14 Temmuz 2007
  • thelonelyisland

    thelonelyisl

    23 Aralık 2005