【问题标题】:How do I write a gql query that filters on the length of a field?如何编写过滤字段长度的 gql 查询?
【发布时间】:2012-08-05 12:12:20
【问题描述】:

我想按数据存储区中某个字段的长度过滤查询,但我似乎无法在 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() 过滤器,整个查询都有效。

谢谢。

【问题讨论】:

标签: python google-app-engine


【解决方案1】:

由于 DataStore 的工作方式,您不能(至少据我了解)。字符串的长度需要是您的Model 的属性(静态或动态使用db.Expando),然后您对其进行过滤。

【讨论】:

    【解决方案2】:

    一种可能的解决方案:
    修改查询以按 DESC 顺序检索结果,然后在查询检索后通过访问所需的结果来处理结果。

    更改查询:

      q = db.GqlQuery("SELECT CommentCode FROM Comments " + 
                        "WHERE RefObjType = 'paper' AND RefObjID = :1" +
                        "ORDER BY CommentCode DESC ", RefObjID, 1)
    

    在此之后,使用循环和条件语句选择具有length(CommentCode)==2 的行。

    【讨论】:

    • 谢谢。这为我指明了寻找答案的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2015-04-18
    • 2020-08-01
    • 2019-10-11
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多