Python db.Query.fetch(limit)返回所有结果,而不是limit
我在python 2.7上使用appengine,并通过以下调用查询数据库实体:Python db.Query.fetch(limit)返回所有结果,而不是limit,python,google-app-engine,Python,Google App Engine,我在python 2.7上使用appengine,并通过以下调用查询数据库实体: query = Model.all().filter("profile =", p_key) query.order('-created') query.run(limit=10) logging.debug('count is %i' % query.count()) #shows 35 instead of 10 我也尝试过使用query.fetch(10),但仍然返回所有结果,而不是limit。有什么想法吗
query = Model.all().filter("profile =", p_key)
query.order('-created')
query.run(limit=10)
logging.debug('count is %i' % query.count()) #shows 35 instead of 10
我也尝试过使用query.fetch(10),但仍然返回所有结果,而不是limit。有什么想法吗?根据GAE-你试过了吗
query.fetch(limit = 10)
此外,您是否验证了过滤器是否正常工作(没有任何限制命令)-以下是有关您未更新
查询变量的文档
这样做:
query = Model.all().filter("profile =", p_key)
query = query.order('-created')
query = query.run(limit=10)
现在,结果被分配给您的查询变量。
您正在查询,但没有将其分配给任何对象。这很奇怪。all()和run()的使用表明这是在使用旧的db包,其中order()对查询有副作用,不需要赋值;此外,run()返回一个迭代器,它是一个与查询完全不同的对象。真正的问题是run(limit=N)不在查询中存储限制;您必须调用q.count(limit=N)才能将限制应用于count调用。也许你可以发布为你工作的实际代码?@GuidovanRossum如果run()
返回一个迭代器,那么将该迭代器分配给变量有什么问题。好的,我同意将其命名为query
并将迭代器/结果分配给该变量没有意义,但除此之外,它是问题的解决方案。还是我遗漏了什么?这只是您给它起的令人困惑的名字——因为最初的代码示例接着调用query.count(),如果query是一个迭代器,它肯定会失败。