如何编写一个过滤字段长度的gql查询?

时间:2012-08-05 12:12:20

标签: python google-app-engine

我想按数据存储区中某个字段的长度过滤查询,但看起来我不能在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()过滤器,整个查询都可以工作。

感谢。

2 个答案:

答案 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的循环和条件语句的行。