使用数组执行 NDB IN 查询
Doing an NDB IN query with an array
我正在尝试执行一个查询,直觉上我会这样写:
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 不会将它解析为有效查询,而且感觉超级不雅。
这里的规范方法是什么?
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))
我正在尝试执行一个查询,直觉上我会这样写:
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 不会将它解析为有效查询,而且感觉超级不雅。
这里的规范方法是什么?
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))