gpt4 book ai didi

python - 如何正确理解 "cursor"

转载 作者:行者123 更新时间:2023-11-28 16:51:41 24 4
gpt4 key购买 nike

我正在尝试将光标应用于我的应用程序,但是文档对我来说不够清晰。谷歌对光标的描述 http://code.google.com/appengine/docs/python/datastore/queries.html#Query_Cursors

The cursor's position is defined as the location in the result list after the last result returned. A cursor is not a relative position in the list (it's not an offset); it's a marker to which the datastore can jump when starting an index scan for results. If the results for a query change between uses of a cursor, the query notices only changes that occur in results after the cursor. If a new result appears before the cursor's position for the query, it will not be returned when the results after the cursor are fetched. Similarly, if an entity is no longer a result for a query but had appeared before the cursor, the results that appear after the cursor do not change. If the last result returned is removed from the result set, the cursor still knows how to locate the next result.

在我的理解中,查询结果似乎总是以默认顺序返回(例如 __ key __)。然后,通过指定游标,它会添加一个过滤器,过滤掉该游标之前的所有结果。正如谷歌过去提到的那样。是真的吗?

使用 __ 键 __ 和非唯一属性进行分页 http://code.google.com/appengine/articles/paging.html

另外一个问题,游标可以和迭代或者任务一起使用吗?由于某些原因,此功能无法正常工作。通常在迭代过程中可能会产生“query not found”。

这是我的例子:

people = Person.all().filter("age > ", 30)
if cursor:
people.with_cursor(cursor)

try:
for person in people: # query not found
cursor = people.cursor()

except DeadlineExceededError:
taskqueue.add(url="/people", params= {"cursor", cursor})

最佳答案

您的理解或多或少是正确的,但是游标不能简单地认为是添加过滤器。假设您有一个结果集,首先按年龄排序,然后按姓名排序。如果您最后返回的结果有 age=30 和 name=Bob,则没有一组条件可以准确返回之后的结果 - age>=30 和 name>Bob 不会返回 31 岁的 Alice。

游标更像是结果集中的书签。它表示您离开的地方,因此您可以稍后回来。如果结果集在您的光标之前或之后被修改,光标将保留在同一个位置 - 因此您将始终从您离开​​的地方继续。

回答您的其他问题:是的,查询总是有一个隐含的顺序。那是什么取决于所讨论的查询(在您的情况下,它将首先按年龄,然后按),但它确保结果的总顺序。您引用的分页文章已过时,并提供了一种分页前的方法。您可以忽略它以支持游标。

您可以在任务之间(以及在用户之间)很好地传递光标。如果您看到错误,您必须先向我们展示堆栈跟踪,然后我们才能提供任何帮助。

关于python - 如何正确理解 "cursor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557791/

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