使用GQL,可以为某些属性运行查询,该属性具有某些列表foo
中的值。
foo = ['a']
bar = MyModel.gql('WHERE bar IN :1', foo).get().bar
bar == 'a'
#False
bar in 'a'
#True
我想做的是与此相反:db.ListProperty
,barfoo
是否包含值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'
匹配。
答案 0 :(得分:1)
要搜索重复属性中的文字值,只需使用普通=
:
MyModel.gql('WHERE barfoo = :1', foobar)
对于“listproperty中的任何此列表”,您可以使用与原始查询完全相同的IN。请注意,在GAE数据存储区中IN通常非常低效。
(注意,在db / ndb API上使用GQL没有任何好处。它不能做那些API不能做的事情,事实上这些语句被转换为完全相同的底层远程过程调用。)