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

Hoa*_*ham 5 python google-app-engine google-cloud-datastore

在Google App Engine数据存储建模中,我想问一下如何使用类UserProperty检查属性的空值?例如:我有这个代码:

class Entry(db.Model):
  title = db.StringProperty()
  description = db.StringProperty()
  author = db.UserProperty()
  editor = db.UserProperty()
  creationdate = db.DateTimeProperty()
Run Code Online (Sandbox Code Playgroud)

当我想检查那些编辑器不为null的条目时,我不能使用这种GqlQuery

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

我想知道是否有任何方法用UserProperty检查变量的存在?谢谢!

Ale*_*lli 13

query = db.GqlQuery("SELECT * FROM Entry WHERE editor > :1",None)
Run Code Online (Sandbox Code Playgroud)

但是,你不能有ORDER BY一个列并且在另一列上有一个不等式条件:这是一个众所周知的GAE限制,与作为UserProperty的属性无关,也与使用None的不等式检查无关.

编辑:之前我有一个!=,但正如@Nick所指出的那样,任何东西都是!=无是>无,并且>大约是GAE的两倍(因为!=由<和>的联合合成),所以使用>这是一个值得优化的.

  • 在这种情况下,"WHERE editor>:1"将是更好的选择 - 一个!=查询被转换为两个查询 - 一个用于小于,一个用于大于.因为没有什么比None更少,所以跳过它是有意义的. (2认同)