Привязка параметров с использованием GQL в Google App Engine - PullRequest
2 голосов
/ 27 августа 2009

Хорошо, у меня есть этот режим:

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

1 Ответ

3 голосов
/ 27 августа 2009

Замена:

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

...