2017-10-09 74 views
1

我想执行我会直觉地写了一个查询:做一个NDB IN查询与阵列

Project.query(Project.project_id IN ("abc","def")).fetch() 

我已经了解到,在NDB,你这样做,而不是:

Project.query(ndb.OR(Project.project_id == "abc", Project.project_id == "def")).fetch() 

我一般都很好,即使阅读起来有点困难。尽管(对于像我这样的新手),我不明白为什么解释者不能为你做出辛苦的工作,并且接受/解析一个IN到OR的巢中......但这是一个单独的问题。

问题是,我的可接受的project_id值列表 - 在本例中为“abc”,“def” - 是动态的。通过IN,我可以将我的头包裹在IN列表中。有了这些多个OR,我想我可以迭代我的列表并写出链式语句 - 但这将是一个字符串,所以我怀疑ndb不会将其解析为有效查询,并且感觉超级不雅。

这是什么规范的方法?

回答

2

Google doc for IN具有这个例子:

查询= Article.query(Article.tags.IN([ '蟒', '红宝石', 'PHP']))

其建议你应该可以这样做:

dynamic_list = ['abc','def','ghi'] 
Project.query(Project.project_id.IN(dynamic_list)) 
+0

Got it!我认为这些文档是说你必须以第二种风格来编写它。如果第一种(更传统的)风格起作用(而且确实如此),我更喜欢这一点。 –