2

さて、私はこのモードを持っています:

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

4

1 に答える 1

3

代わりの:

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

于 2009-08-27T03:40:41.317 に答える