1

我有这个用于应用引擎的 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(),我会得到空字符串作为游标。为什么?

4

2 回答 2

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='
于 2012-06-06T13:26:53.700 回答
1

Query.run()(或简单地迭代Query's 实例)返回一个迭代器。在您获得查询的光标时,它甚至还没有开始获取任何内容。我想,在你的情况下——当你要使用游标时——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
于 2012-06-06T13:27:32.193 回答