Vinculação de parâmetros usando GQL no Google App Engine
-
20-09-2019 - |
Pergunta
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))
Portanto, quando uma entidade é adicionada, é gerado um float aleatório (0-1) e, quando preciso pegar uma entidade aleatória, quero poder usar apenas uma consulta selecionada simples. 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")
Tão claramente minha consulta está errada; Como se usa uma variável em uma declaração onde
Solução
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 obter mais informações: "A aula de consulta GQL"
O engraçado é que acabei de aprender isso cerca de 2 horas atrás: P
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow