我有个问题。我使用游标调用查询,该游标第一次被设置为游标()。我从查询中获取了50个项目
qry = cls.query(cls.store == store_id, cls.user != exclude_user, cls.active == True, cls.offline == False).order(cls.user, cls._key, -cls.created)我将该qry返回给调用类,并运行以下抓取
result, next_cursor, more = qry.fetch_page(pagination, start_cursor=cursor)这没有问题,然后我对游标执行以下操作,并根据文档将其传递回客户端:
client_params['next_page'] = next_cursor.urlsafe()我已经记录了这个游标,以确保它在对服务器的返回调用中是相同的,它是
我是这样理解的:
cursor = Cursor(urlsafe=page)但是,第二次尝试检索接下来的50个或更少的项目时,总是会导致以下错误:
BadRequestError: cursor position is outside the range of the original query现在,整个过程在本地开发机器上运行良好,但不能在生产环境中运行
发布于 2017-08-17 00:53:34
我怀疑您的问题来自于cls.user != exclude_user查询参数。
来自Limitations of cursors (是的,我知道它在被取代的db文档中,但我非常确定它也适用于ndb -同样的限制are present in java as well,它们很可能是在数据存储端,而不是在客户端库端):
!=和IN运算符是通过多个查询实现的,所以使用它们的查询不支持游标。要进行确认,请尝试删除该查询参数。
至于为什么它只发生在生产环境中-开发服务器仿真可能没有涵盖这些细节。
https://stackoverflow.com/questions/45687857
复制相似问题