在 Google App Engine 中使用 GQL 进行参数绑定

发布于 2024-08-03 06:01:41 字数 1036 浏览 6 评论 0原文

好的,我有这个模式:

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

Okay so I have this mode:

class Posts(db.Model):
  rand1 = db.FloatProperty()
  #other models here

and this controller:

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

So when an entity is added a random float is generated (0-1) and then when I need to grab a random entity I want to be able to just use a simple SELECT query. It errors with:

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

Now this works if I go:

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

So clearly my query is wrong; how does one use a variable in a where statement :S

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昨迟人 2024-08-10 06:01:41

 "...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 查询类< /a>"

有趣的是,我大约 2 小时前才了解到这一点:P

Substitute:

 "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")

with:

  "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1", rand2=rand2)

Or

  "...WHERE rand1 > :1 ORDER BY rand LIMIT 1", rand2)

See for more information: "The Gql query class"

The funny thing is that I have just learned this about 2 hrs ago :P

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文