如何在Google App Engine中检查UserProperty的null值

5 投票
1 回答
2101 浏览
提问于 2025-04-15 13:29
query = db.GqlQuery("SELECT * FROM Entry " +
                    "WHERE editor IS NOT NULL" +
                                    "ORDER BY creationdate DESC")
    entries = query.fetch(5)

在Google App Engine的数据库建模中,我想问一下,怎么检查一个叫做UserProperty的属性是否为空?

比如,我有这段代码:

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

当我想检查那些编辑者不为空的条目时,我不能用这种GqlQuery。

我在想有没有什么方法可以检查UserProperty这个变量是否存在?谢谢!

1 个回答

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

不过,你不能在一个列上使用ORDER BY,同时在另一个列上使用不等式条件:这是一个众所周知的GAE限制,跟这个属性是否是UserProperty没有关系,也和你在做的与None的比较无关。

编辑:我之前用的是!=,但正如@Nick指出的,任何不等于None的东西都是大于None的,而在GAE上,使用大于(>)的速度大约是使用不等于(!=)的两倍(因为不等于是通过小于(<)和大于(>)的组合来实现的),所以在这里使用大于是一个值得做的优化。

撰写回答