2009-08-27 80 views
2

好的結合,所以我有該模式:參數在谷歌應用程序引擎使用GQL

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

所以很明顯我的查詢是錯誤的;一個人如何使用變量在哪裏聲明:S

回答

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) 

更多信息請參見: 「The Gql query class

有趣的是,我剛剛得知這個大約2小時前:P

+0

耶,謝謝 - 這是固定的,:P雖然它實際上是: WHERE RAND 1>:1個ORDER BY RAND 1 LIMIT 1" ,RAND2 ) 我不小心有'rand'而不是'rand1',因爲別人想知道並且需要幫助。 – 2009-08-27 03:54:25