Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用查询迭代器在python中为应用程序引擎查询游标_Python_Google App Engine_App Engine Ndb - Fatal编程技术网

使用查询迭代器在python中为应用程序引擎查询游标

使用查询迭代器在python中为应用程序引擎查询游标,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我想使用分页而不是通过调用 greets, next_curs, more = Greeting.query().fetch_page(10, start_cursor=curs) 但是通过使用查询迭代器。因为这样我可以使用微线程将所有连续的“get”聚合在一起,如中所述 现在在我的代码中 class Book(ndb.Model): author = ndb.KeyProperty('a', kind=User, required=True) author_key = ndb.Ke

我想使用分页而不是通过调用

greets, next_curs, more = Greeting.query().fetch_page(10, start_cursor=curs)
但是通过使用查询迭代器。因为这样我可以使用微线程将所有连续的“get”聚合在一起,如中所述

现在在我的代码中

class Book(ndb.Model):
    author = ndb.KeyProperty('a', kind=User, required=True)

author_key = ndb.Key(urlsafe=user_id)
books_query=Book.query(Book.author == author_key)
@ndb.tasklet
def callback(book):
     author = yield book.author.get_async()
     raise ndb.Return(book, author)

q_option = {'limit' : 2, 'produce_cursors' : True }
outputs = books_query.map(callback, **q_option)
不确定哪里出了问题但如果我尝试

books_query.iter().cursor_before() 

它失败了,跟踪如下

raise datastore_errors.BadArgumentError('There is no cursor currently')
BadArgumentError: There is no cursor currently
任何使用查询迭代器和带游标的Tasklet的详细示例都会让我明白这一点。

books\u query.iter().cursor\u after()
依赖于
.iter(**q\u options)
,它使用自己的参数创建查询迭代器

问题是无法访问
.map()
使用的内部迭代器


请参阅Guido对该主题相关问题的回答:

我怀疑您的map函数与此有关@JimmyKane我也有这种感觉,但我无法指出导致问题的任何具体原因。你的问题不在于你的地图功能。您尚未在任何位置构造游标。这就是为什么您会得到“当前没有光标”。map()调用支持所有查询选项,包括游标。@TimHoffman我不确定是否应该为我试图获取的第一页构造游标。这个api是否应该足够聪明,知道如果您将“None”作为“start\u cursor”,它应该只获取“limit”指定的结果并为第二页生成cursor?不,因为您可能不想要/不需要游标。按照使用游标的示例,在创建查询时构造并提供游标。
raise datastore_errors.BadArgumentError('There is no cursor currently')
BadArgumentError: There is no cursor currently