代码之家  ›  专栏  ›  技术社区  ›  Zeynel

GQL语法条件

  •  0
  • Zeynel  · 技术社区  · 15 年前

    在GQL中 syntax summary

    <condition> := <property> {< | <= | > | >= | = | != } <value>
    

    但是在一个 example here

    if users.get_current_user():
        user_pets = db.GqlQuery("SELECT * FROM Pet WHERE owner = :1",
                                users.get_current_user())
    

    :1 ?

    根据语法应该有 := 在那里。

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Saxon Druce    15 年前

    您发布的语法链接上的GQL语法如下:

    SELECT [* | __key__] FROM <kind>
      [WHERE <condition> [AND <condition> ...]]
      [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
      [LIMIT [<offset>,]<count>]
      [OFFSET <offset>]
    
    <condition> := <property> {< | <= | > | >= | = | != } <value>
    <condition> := <property> IN <list>
    <condition> := ANCESTOR IS <entity or key>
    

    这个 := <condition> 在主表达式中可以替换为 := 在这三个中的任何一个 < 声明。

    在这个例子中,他们选择了 * 而不是 __key__ ,和 <kind> Pet ,只有一个 WHERE 条件,没有 ORDER BY , LIMIT OFFSET 条款。

    SELECT * FROM Pet WHERE <condition>
    

    然后我们可以替换第一个条件表达式,即:

    <condition> := <property> {< | <= | > | >= | = | != } <value>
    

    导致:

    SELECT * FROM Pet WHERE <property> {< | <= | > | >= | = | != } <value>
    

    在这个例子中, <property> owner ,接线员是 = ,以及 <value> :1 ,即:

    SELECT * FROM Pet WHERE owner = :1
    

    the documentation for the GqlQuery class ,则:1表示该值将绑定到 GqlQuery() users.get_current_user() .

    更新:

    我认为这两种方法都不起作用,因为它们都缺少结束查询字符串的双引号。但是,以下两项都应该有效:

    query = db.GqlQuery(
        "SELECT * FROM Rep WHERE author = :1", 
        users.get_current_user())
    
    user = users.get_current_user()
    query = db.GqlQuery(
        "SELECT * FROM Rep WHERE author = :1", 
        user)
    

    一旦拥有了查询对象,就可以调用 fetch()