2009-08-09 5 views
5

Dans Google App Engine, modélisation de banque de données, je voudrais demander comment puis-je vérifier la valeur nulle d'une propriété avec la classe UserProperty? par exemple: J'ai ce code:Comment vérifier la valeur null pour UserProperty dans Google App Engine

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

Quand je veux vérifier les entrées qui ont le rédacteur en chef est non nul, je ne peux pas utiliser ce genre de GqlQuery

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

Je me demande s'il existe une méthode pour vérifier l'existence d'une variable avec UserProperty? Merci!

+0

Pourriez-vous clarifier un peu plus votre code? – Diones

Répondre

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

Cependant, vous ne pouvez pas ORDER BY une colonne et ont une condition d'inégalité sur une autre colonne: c'est une limitation GAE bien connue et n'a rien à voir avec la propriété étant un UserProperty ni avec le contrôle de l'inégalité tu fais l'être avec None.

Modifier: J'avais = avant, mais comme @ Nick a fait remarquer, tout ce qui est = Aucun est> Aucun,> est environ deux fois plus rapide sur GAE (puisque = est synthétisé par l'union de <!! et>), donc en utilisant> voici une optimisation valable.

+2

Dans ce cas, "WHERE editor>: 1" serait un meilleur choix - une requête! = Est traduite en deux requêtes - une pour moins de, et une pour plus de. Puisque rien n'est inférieur à None, il est logique de l'ignorer. –

+0

Merci Alex et Nick !!! Vos réponses ont résolu mon problème! –

+0

Bonne astuce Nick, tx - modification à corriger. –

Questions connexes