Django hızlı bir queryset gelen ilk nesneyi almak için bir yol? | Netgez.com
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

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • Jejoab

    Jejoab

    4 NİSAN 2008
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011