好了,所以我有这样的模式:

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),然后当我需要抓住我想能够只使用一个简单SELECT查询的随机实体。与它错误:

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

现在这个作品,如果我走了:

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

所以很明显我的查询是错误的;一个人如何在一个使用一个变量,其中声明:S

有帮助吗?

解决方案

替换:

 "...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)

更多信息请参见:“的GQL查询类

<子>有趣的是,我刚刚得知这个大约2小时前:P

scroll top