1

ben ndb veri deposu API kullanarak, benhakkında veri deposu ndb.AND vs ve

Entity.query(Entity.p1 == 1 and Entity.p2 == 2) 

veya

Entity.query(ndb.AND(Entity.p1 == 1, Entity.p2 == 2)) 

gibi bir şey kullanarak birden özelliklerini kapsayan bir şey için bir sorgu olabileceğini saptadık Bunlar aynı sonucu verir, ancak ikincisi sorguyu gerçekleştirmek için p1 ve p2 özelliklerinde ekstra bir indekse ihtiyaç duyar. Benzer şekilde, ndb.AND yerine sorgudaki .filter kullanırsanız, herhangi bir dizine de gerek yoktur. Bu sorgu veri deposu yöntemleri arasındaki fark nedir?

cevap

4

Dikkatli olun; İlk versiyon ('ve') filtrenin sadece ikinci kısmına değerlendirir. Bu deneyin:

clause = (Entity.p1 == 1 and Entity.p2 == 2) 
print clause 

=>

FilterNode('p2', '=', 2) 

beklenen filtrelerde aşağıdaki sonuçları yapmak:

clause = (Entity.p1 == 1, Entity.p2 == 2) 

=> neye benzer

(FilterNode('p1', '=', 1), FilterNode('p2', '=', 2)) 

senin ndb.AND sonuçlarını kullanarak ikinci madde örneğin:

(Bu örnekte, sorgu sonuçları aynıdır).

Tek bir özellik sorgusu için ek bir dizin gerekli olmadığından, ilk sorgu sürümü için oluşturulmuş hiçbir indeks görmezsiniz ('ve' kullanarak).

İlgili konular