在Google App Engine中使用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")
那么它就能正常工作;所以很明显我的查询有问题。那么在where语句中怎么使用变量呢 :S
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查询类”
有趣的是,我大约在两个小时前才学到这个 :P