2009-08-09 15 views
5

W Google App Engine, modelowanie magazynu danych, chciałbym zapytać, w jaki sposób mogę sprawdzić wartość pustą nieruchomości z klasą UserProperty? na przykład: mam ten kod:Jak sprawdzić wartość pustą dla UserProperty w Google App Engine

class Entry(db.Model): 
    title = db.StringProperty() 
    description = db.StringProperty() 
    author = db.UserProperty() 
    editor = db.UserProperty() 
    creationdate = db.DateTimeProperty() 

Kiedy chcę sprawdzić te wpisy, które mają ten edytor nie jest nieważna, nie mogę korzystać z tego rodzaju GqlQuery

query = db.GqlQuery("SELECT * FROM Entry " + 
        "WHERE editor IS NOT NULL" + 
            "ORDER BY creationdate DESC") 
    entries = query.fetch(5) 

Zastanawiam czy istnieje jakaś metoda sprawdzania istnienia zmiennej z UserProperty? Dziękujemy!

+0

Czy możesz wyjaśnić swój kod trochę więcej? – Diones

Odpowiedz

13
query = db.GqlQuery("SELECT * FROM Entry WHERE editor > :1",None) 

Jednak nie można ORDER BY jedna kolumna i mieć stan nierówności na innej kolumnie: to jest dobrze znane ograniczenie GAE i nie ma nic wspólnego z własnością bycia UserProperty ani ze sprawdzianem nierówność robisz z Nic.

Edit: Miałem = wcześniej, ale jak @Nick podkreślił niczego, co = None jest> Brak, i> jest około dwa razy szybciej na GAE (od = jest syntetyzowany przez unię <!! i>), więc używanie> tutaj jest wartościową optymalizacją.

+2

W tym przypadku "GDZIE redaktor>: 1" byłby lepszym wyborem - zapytanie! = Zostało przetłumaczone na dwa zapytania - jeden dla mniejszego i jednego dla większego niż. Ponieważ nic nie jest mniejsze niż None, warto go pominąć. –

+0

Dziękuję Alex i Nick !!! Twoje odpowiedzi rozwiązały mój problem! –

+0

Świetna wskazówka Nick, tx - edycja do naprawy. –