Google App Engine(python):确定查询是否返回结果的最佳方法

时间:2011-10-28 15:15:59

标签: python google-app-engine

我在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)会更好吗?

我不关心结果的数量,只要有没有。

4 个答案:

答案 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个匹配项,所以你不需要循环。所有你真正检查的是你是否实际获得了一个实体或从查询中算回来。