我在GAE上使用webapp框架,为了显示查询结果,我在查询对象上执行get(),然后在get()返回任何内容时迭代它,例如:< / p>
query = Employee.all().filter("some_boolean_property = ", True)
if query.get():
for employee in query:
# output employee.name etc.
# ...
else:
# output "no records found" message
# ...
我正在执行get()而不仅仅是在for循环上执行else操作的原因是因为我在表中输出数据,如果没有,我不想写表代码结果。以前代替get()我正在做fetch(1),但我相信它们是等价的(即get()只执行查询但最多只有一个结果)。这就是我的问题 - 这是真的,我可以用这种方式使用get(),这是查找查询是否返回结果的最佳方法吗?可能数(1)会更好吗?
我不关心结果的数量,只要有没有。
答案 0 :(得分:1)
只需致电fetch
即可获得所需的结果数量,然后对其进行迭代。例如:
query = Employee.all().filter("some_boolean_property = ", True)
results = query.fetch(20)
if results:
for employee in results:
# Do stuff
答案 1 :(得分:0)
另一种方法可能是在循环中设置一个标志,表示至少找到一条记录,然后测试该标记是否为“找不到记录”的情况。
found = False
query = Employee.all().filter("some_boolean_property = ", True)
for employee in query:
found = True
# output employee.name etc.
# ...
if not found:
# output "no records found" message
# ...
这样做的好处是可以删除对数据存储区的调用。
答案 2 :(得分:0)
您可以使用Query
班级的count
方法。如果您提供limit
,它只会检查那么多。这是一个例子:
query = Employee.all().filter("some_boolean_property = ", True)
if query.count(limit=1):
for employee in query:
pass
答案 3 :(得分:0)
'count'只返回查询结果的数量
'get'和'fetch'返回整个实体
因此,如果您只想要查询计数,那么'count'会更有效率
此外,我不明白为什么人们在查询1项后运行循环。如果你使用get(),你将只收到1个匹配项,所以你不需要循环。所有你真正检查的是你是否实际获得了一个实体或从查询中算回来。