谷歌应用引擎或查询(Python)

4

请问有人能分享在应用引擎中执行“或”查询的方法吗?

假设我有以下代码:

class A_db_model(db.Model):
 valueA = db.ListProperty(basestring)

我有一个valueA变量

aaa
aaa, bbb
bbb
ccc

我想返回值是否匹配'aaa'或'bbb',并返回不重复的结果。
2个回答

6

试一试这个?

A_db_model.all().filter('valueA IN', ['aaa', 'bbb'])

或者等效的 GQL:

GqlQuery('SELECT * FROM A_db_model WHERE valueA IN :1', ['aaa', 'bbb'])

4
注意,数据存储无法执行此类查询;这种语法会导致执行 2 个查询并合并结果。在 IN 条件中使用长列表的值是一个糟糕的想法。 - Wooble
是的。实际上,由于列表属性的工作方式,您最终在N个查询中进行了NxM次比较。 - Amber

2
@Amber的方法存在两个主要问题,其一是速度较慢,因为它在后台基本上为每个值运行一个查询;其二是最多只能查询30个值。我刚刚写了一篇关于这个问题的博客文章,解释了在App Engine中实现最佳可扩展性的基本OR查询的方法。您可以使用单独的实体来实现这一点。详情请参见文章。 http://tornblue.com/post/11310830291/app-engine-how-to-do-an-efficient-or-query

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接