我想按数据存储区中某个字段的长度过滤查询,但看起来我不能在WHERE子句中包含len函数。
q = db.GqlQuery("SELECT CommentCode FROM Comments " +
"WHERE RefObjType = 'paper' AND RefObjID = :1 AND len(CommentCode) = :2" +
"ORDER BY CommentCode DESC ", RefObjID, 1)
这导致:BadQueryError: Parse Error: Invalid WHERE Condition at symbol (
有人能举例说明我如何才能让它发挥作用吗?
RefObjID部分有效,因为如果我省略len()过滤器,整个查询都可以工作。
感谢。
答案 0 :(得分:1)
由于DataStore的工作原理,你不能(至少据我所知)。字符串的长度必须是db.Expando
的属性(使用Model
的静态或动态),然后对其进行过滤。
答案 1 :(得分:0)
可能的解决方案:
修改查询以DESC顺序检索结果,然后通过在查询检索后访问所需结果来处理结果。
更改查询:
q = db.GqlQuery("SELECT CommentCode FROM Comments " +
"WHERE RefObjType = 'paper' AND RefObjID = :1" +
"ORDER BY CommentCode DESC ", RefObjID, 1)
在此之后选择具有length(CommentCode)==2
的循环和条件语句的行。