GQL查询“db.ListProperty CONTAINS foo”?

时间:2014-10-03 14:52:28

标签: python google-app-engine google-cloud-datastore gql

使用GQL,可以为某些属性运行查询,该属性具有某些列表foo中的值。

foo = ['a']
bar = MyModel.gql('WHERE bar IN :1', foo).get().bar
bar == 'a'
#False
bar in 'a'
#True

我想做的是与此相反:db.ListPropertybarfoo是否包含值foobar

类似的东西:

foobar = 'a'
barfoo = MyModel.gql('WHERE barfoo CONTAINS :1', foobar).get().barfoo
barfoo == 'a'
#False
'a' in barfoo
#True

这可能吗?如果没有,我怎样才能合理有效地复制这种行为?

作为扩展,如果我能看到列表属性foo中是否有列表bar中的任何一个,那就更好了。例如如果bar == ['a', 'b', 'c'],那么我可以针对['a', 'y', 'z']进行查询,并将其返回,因为它与'a'匹配。

1 个答案:

答案 0 :(得分:1)

要搜索重复属性中的文字值,只需使用普通=

MyModel.gql('WHERE barfoo = :1', foobar)

对于“listproperty中的任何此列表”,您可以使用与原始查询完全相同的IN。请注意,在GAE数据存储区中IN通常非常低效。

(注意,在db / ndb API上使用GQL没有任何好处。它不能做那些API不能做的事情,事实上这些语句被转换为完全相同的底层远程过程调用。)