gpt4 book ai didi

python - 获取下一批查询时为 "BadRequestError: cursor position is outside the range of the original query"

转载 作者:行者123 更新时间:2023-11-28 18:40:39 25 4
gpt4 key购买 nike

我有这个处理程序来对我们应用程序的所有用户执行一些处理。基本上,它需要 1 个批处理,处理该批处理的记录,然后为下一批处理排队新任务。

QueueAllUsers(BaseHandler):
FETCH_SIZE = 10
FILTERS = [
UserConfig.level != 0,
UserConfig.is_configured == True
]
ORDER = [UserConfig.level, UserConfig._key]

def get(self):
cursor_key = self.request.get('cursor')
cursor = None
if cursor_key:
# if `cursor` param is provided, use it
cursor = Cursor(urlsafe=str(cursor_key))
q = UserConfig.query(*self.FILTERS).order(*self.ORDER)
total = q.count() # 31 total records
logging.info(total)
users, next_cursor, more = q.fetch_page(self.FETCH_SIZE,
keys_only=True,
start_cursor=cursor)
self.process_users(users)
if more:
self.queue_next_batch(next_cursor)

def queue_next_batch(self, next_cursor):
# Call get() again but this time pass `cursor` param to process next batch
logging.info(next_cursor.urlsafe())
url = '/queue_all_users?cursor=%s' % (next_cursor.urlsafe())
taskqueue.add(
url=url,
method='get',
queue_name='cronjobs'
)

def process_users(self, users):
logging.info(len(users))
# trimmed

但是当第 2 个批处理的任务运行时,NDB 抛出 BadRequest 错误,指出游标超出范围。

我不明白为什么它超出范围?我从总共 31 中提取了 10 记录,因此光标应该仍然有效。

请注意,错误是在第二批(即记录 11-20)上抛出的。

所以流程是这样的:

  1. 调用/queue_all_users 处理第一批(无游标)。一切正常。
  2. 第 1 步为下一批创建 /queue_all_users?cursor=123456 的任务。
  3. 调用 /queue_all_users?cursor=123456(提供光标)。 fetch_page 抛出 BadRequestErrror

编辑:我尝试将 FETCH_SIZE 设置为 17,并且成功获取了第二批!似乎 17 以下的任何内容都会导致错误,而 17 以上的内容有效。那么……到底是什么?

最佳答案

我遇到了同样的问题。当我进行第一个查询时,一切正常,并返回一个游标。使用游标的第二个查询给我错误:

BadRequestError: cursor position is outside the range of the original query.

我尝试了您的解决方案,但对我不起作用。因此,我更改了查询中的过滤器并且有效,我不知道为什么,但也许可以成为您和其他人的解决方案。

我的旧查询是:

page_size = 10
query = Sale.query(ancestor=self.key).filter(ndb.AND(
Sale.current_status.status != SaleStatusEnum.WAITING_PAYMENT,
Sale.current_status.status != SaleStatusEnum.WAITING_PAYMENT
).order(Sale.current_status.status, Sale._key)
query.fetch_page(page_size, start_cursor=cursor)

然后我把所有的“!=”改成IN操作,像这样:

page_size = 10
query = Sale.query(ancestor=self.key).filter(
Sale.current_status.status.IN([
SaleStatusEnum.PROCESSING,
SaleStatusEnum.PAID,
SaleStatusEnum.SHIPPING,
SaleStatusEnum.FINALIZED,
SaleStatusEnum.REFUSED])
).order(Sale.current_status.status, Sale._key)
query.fetch_page(page_size, start_cursor=cursor)

关于python - 获取下一批查询时为 "BadRequestError: cursor position is outside the range of the original query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26582161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com