是否可以获取查询开头的光标,以便将来运行的查询可以将其用作end_cursor?

时间:2011-12-30 05:19:03

标签: python google-app-engine google-cloud-datastore

我正在尝试渲染一个以给定模型的前n个实体开头并让页面定期检查新项目的页面。类似于Twitter如何呈现推文页面,然后在提供“6条较新的推文”时提示您。

我目前通过以下方式执行此操作:

query = Item.all()
query.order("-created")
query.fetch(100)
cursor = query.cursor()
timestamp = time.time()
# render a page storing cursor and timestamp so it can request for older items
# & regularly check for newer ones.

当我收到带有时间戳的更新请求时,我会运行一个在该时间戳之前过滤掉项目的查询。

我想知道是否有办法按以下方式执行此操作(以及是否会更快):

  • 抓住光标开头,让我们调用这个update_cursor
  • 像以前一样获取数据等。

当页面要求更新(并提供update_cursor)时,执行相同的查询但使用query.with_cursor(end_cursor=update_cursor)query.run()而不是fetch(),以便它抓住我所有的项目,直到我从先前开始

我试图获取0个实体并查看光标,但这只是给我一个空字符串。

这是否可行(如果可行,则比时间戳方法快得多)?有什么建议或意见吗?

1 个答案:

答案 0 :(得分:0)

如果元素不在索引的开头,它们在光标的末尾?这可以帮助你成为你模型的最新实体(我唯一不确定你是否会在查询的最后一个元素后得到一个有效的游标)。接下来当您提取更新时,只需从该光标开始查询并获取最新实体。

我自己没试过,但它可以运作,尝试一下,让我知道它是怎么回事。