Parâmetro de ligação usando GQL no Google App Engine

votos
2

Ok, então eu tenho este modo:

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

e este controlador:

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

Assim, quando uma entidade é adicionado um float aleatório é gerado (0-1) e, em seguida, quando eu preciso pegar uma entidade aleatório Eu quero ser capaz de usar apenas uma consulta SELECT simples. Ele erros com:

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

Agora isso funciona se eu for:

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

Então, claramente, a minha consulta está errado; como é que se usar uma variável em uma declaração em que: S

Publicado 27/08/2009 em 04:28
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Substituto:

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

com:

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

Ou

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

Veja para mais informações: " A classe consulta GQL "

O engraçado é que eu só aprendi isso cerca de 2 horas atrás: P

Respondeu 27/08/2009 em 04:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more