El enlace de parámetros utilizando GQL en Google App Engine
-
20-09-2019 - |
Pregunta
Está bien, así que tengo este modo:
class Posts(db.Model):
rand1 = db.FloatProperty()
#other models here
y 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))
Así que cuando se añade una entidad un flotador aleatorio se genera (0-1) y luego cuando tengo que agarrar una entidad aleatoria Quiero ser capaz de utilizar sólo una consulta SELECT simple. Con él los errores:
BadArgumentError('Missing named arguments for bind, requires argument rand2',)
Ahora bien, esto funciona si voy:
posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > 1 ORDER BY rand LIMIT 1")
Así que claramente mi consulta es incorrecto; ¿cómo se puede utilizar una variable en un comunicado, donde: S
Solución
Sustituto:
"...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")
por:
"...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1", rand2=rand2)
o
"...WHERE rand1 > :1 ORDER BY rand LIMIT 1", rand2)
Para más información consúltese: " La clase de consulta GQL "
Lo curioso es que solo he aprendido esto hace aproximadamente 2 horas: p
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow