选择所有记录,ID不在列表中
如何制作:
query = Story.all()
query.filter('ID **NOT IN** =', [100,200,..,..])
答案 0 :(得分:3)
在App Engine中无法有效地执行此操作。您应该只选择没有该过滤器的所有内容,并过滤掉代码中的任何匹配实体。
答案 1 :(得分:2)
现在通过GQL查询支持
Python运行时中的'IN'和'!='运算符实际上是 在SDK中实现并转换为多个查询 罩”。
例如,查询“SELECT * FROM People WHERE name IN('Bob', '简')“被翻译成两个查询,相当于运行 “SELECT * FROM People WHERE name ='Bob'”和“SELECT * FROM People WHERE name ='Jane'“并合并结果。结合多个 disjunctions乘以所需的查询数,因此查询 “SELECT * FROM People WHERE name IN('Bob','Jane')和年龄!= 25” 为每个可能的条件生成总共四个查询 (年龄小于或大于25岁,姓名为'Bob'或'Jane'),然后 将它们合并为一个结果集。
答案 2 :(得分:0)
这是一个老问题,所以我不确定ID
是否属于非关键属性。但为了回答这个问题:
query = Story.all()
query.filter('ID **NOT IN** =', [100,200,..,..])
...使用ndb模型,您绝对可以查询列表中的项目。例如,请参阅IN
和!=
的文档here。以下是OP请求过滤的方法:
query = Story.filter(Story.id.IN([100,200,..,..])
我们甚至可以查询重复键列表中的项目:
def all(user_id):
# See if my user_id is associated with any Group.
groups_belonged_to = Group.query().filter(user_id == Group.members)
print [group.to_dict() for group in belong_to]
一些警告:
那里的文档提到,为了执行这些类型的查询,数据存储区在幕后执行多个查询,(1)可能需要一段时间才能执行,(2)如果您搜索需要更长时间在重复的属性中,(3)通过更多操作来增加成本。