我有这个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(),我得到游标的空字符串。为什么呢?
答案 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