Cursor在App Engine上返回fetch()但不是run()

时间:2012-06-06 05:50:00

标签: python google-app-engine

我有这个app engine的python代码:

def queryArticles(status=1, limit=10, **offset):
    query = Article.all().filter('status =', status).order('-modified')
    articles = query.fetch(limit=limit, **offset)
    cursor = query.cursor()
    return articles, cursor

如果我使用fetch()游标返回,但是如果使用run(),我得到游标的空字符串。为什么呢?

2 个答案:

答案 0 :(得分:3)

run()方法仅设置运行查询所需的条件(并且在生产中,在后台启动RPC调用)。为了使您的查询具有任何数据知识(游标或其他),您需要通过耗尽查询来获取结果。

>>> query = Model.all()
>>> query_iterator = query.run(limit=5)
>>> query.cursor()
''
>>> list(query_iterator) # Exhaust iterator
[<db.Model instance at 0x...>, ...]
>>> query.cursor()
'E-ABAIICG2oMYXByaWdvbmluamE0cgsLEgVNb2RlbBgKDBQ='

答案 1 :(得分:1)

Query.run()(或简单地迭代Query的实例)返回一个迭代器。在获取查询的光标时,它甚至没有开始提取任何内容。我想,在你的情况下 - 当你要使用游标时 - fetch()就可以了。

如果你真的需要它,这应该可以解决问题:

def queryArticles(status=1, limit=10, **offset):
    query = Article.all().filter('status =', status).order('-modified')
    articles = query.run(limit=limit, batch_size=limit, **offset)
    articles = articles.next()
    cursor = query.cursor()
    return articles, cursor