使用数组执行NDB IN查询

时间:2017-10-09 11:46:41

标签: python-2.7 google-cloud-datastore app-engine-ndb

我正在尝试执行一个我直觉上写成的查询:

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 ==的嵌套......但这是一个单独的问题。 / p>

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

这里的规范方法是什么?

1 个答案:

答案 0 :(得分:3)

Google doc for IN有这个例子:

  

query = Article.query(Article.tags.IN(['python','ruby','php']))

这表明你应该能够做到:

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