Google App Engine:IN过滤器和参数位置

时间:2013-08-16 15:57:32

标签: google-app-engine gql gqlquery

我有一个表,其中一列包含一个列表。我想知道是否可以选择列表中包含特定元素的所有行。

更具体地说,我有一个包含字符串列表的guests列,我想知道特定的guest字符串是否属于此列表。我想写一个这样的查询:

q = TableName.gql('WHERE :g IN guests', g=guest)
然而,似乎我不能把变量放在这个位置。例如,此查询(其中ownerid是字符串而不是字符串列表)也是不允许的:

q = TableName.gql('WHERE :g = ownerid', g=guest)

我似乎必须这样写:

q = TableName.gql('WHERE ownerid = :g', g=guest)

因此,我有以下问题:

  1. 如何构建一个查询,获取列表单元格包含特定成员的行?
  2. GQL查询的参数是否仅限于运算符的右侧?有什么限制?
  3. 我正在使用带有Python 2.7的Google App Engine。谢谢!

1 个答案:

答案 0 :(得分:2)

您误解了IN运营商的用途。它不是用于查询重复字段:您只需使用正常=即可。 IN用于查询列表:例如guest IN [1, 2, 3, 4]。您的查询应该是:

q = TableName.gql('WHERE guests = :g', g=guest)

或更好,因为GQL没有为您提供标准数据库语法所没有的任何内容:

q = TableName.all().filter('guests =', guest)