使用数组执行 NDB IN 查询

pen*_*ent 2 python-2.7 app-engine-ndb google-cloud-datastore

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

Project.query(Project.project_id IN ("abc","def")).fetch()
Run Code Online (Sandbox Code Playgroud)

我了解到在 NDB 中,您可以这样做:

Project.query(ndb.OR(Project.project_id == "abc", Project.project_id == "def")).fetch()
Run Code Online (Sandbox Code Playgroud)

我一般都可以接受,即使它有点难以阅读。尽管(对于像我这样的新手)我不明白为什么解释器不能为您完成艰苦的工作并将 IN 接受/解析为 OR == 的嵌套......但这是一个单独的问题。

问题是我可接受的 project_id 值列表 - 在本例中为“abc”、“def” - 是动态的。使用 IN,我可以将头围绕在 IN 列表之类的东西上。有了这些多个 OR,我想我可以遍历我的列表并写出链式语句 - 但这将是一个字符串,所以我怀疑 ndb 不会将其解析为有效查询,而且感觉非常不雅。

这里的规范方法是什么?

Bar*_*der 6

IN谷歌文档有这个例子:

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

这表明你应该能够做到:

dynamic_list = ['abc','def','ghi']
Project.query(Project.project_id.IN(dynamic_list))
Run Code Online (Sandbox Code Playgroud)