문제

좋아,이 모드가 있습니다.

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) 임의의 엔티티를 잡아야 할 때 간단한 선택 쿼리 만 사용할 수 있기를 원합니다. 다음과 같은 오류가 발생합니다.

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

이제 이것은 내가 가면 작동합니다.

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

그래서 분명히 내 질문은 잘못되었습니다. WHER 문에서 변수를 어떻게 사용합니까 : 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top