代码之家  ›  专栏  ›  技术社区  ›  Dominic Bou-Samra

在谷歌应用引擎中使用gql进行参数绑定

  •  2
  • Dominic Bou-Samra  · 技术社区  · 16 年前

    好的,我有这个模式:

    class Posts(db.Model):
      rand1 = db.FloatProperty()
      #other models here
    

    这个控制器:

    class Random(webapp.RequestHandler):
      def get(self):    
          rand2 = random.random()
          posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")
          #Assigning values for Django templating
          template_values = {
              'posts_query': posts_query,
               #test purposes
              'rand2': rand2,
              }
    
          path = os.path.join(os.path.dirname(__file__), 'templates/random.html')
          self.response.out.write(template.render(path, template_values))
    

    因此,当添加一个实体时,会生成一个随机的浮点(0-1),然后当我需要获取一个随机的实体时,我希望能够只使用一个简单的选择查询。它的错误在于:

    BadArgumentError('Missing named arguments for bind, requires argument rand2',)
    

    如果我去的话,这是可行的:

    posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > 1 ORDER BY rand LIMIT 1")
    

    显然,我的查询是错误的;如何在WHERE语句中使用变量:s

    1 回复  |  直到 16 年前
        1
  •  3
  •   OscarRyz    16 年前

    替代品:

     "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")
    

    用:

      "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1", rand2=rand2)
    

      "...WHERE rand1 > :1 ORDER BY rand LIMIT 1", rand2)
    

    有关详细信息,请参阅:“ The Gql query class

    有趣的是我2小时前才知道这一点:p