Привязка параметров с помощью GQL в Google App Engine
-
20-09-2019 - |
Вопрос
Хорошо, у меня есть этот режим:
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")
Итак, очевидно, что мой вопрос неверен;как использовать переменную в оператореwhere :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
Не связан с StackOverflow