Google app engine 如何从数据存储中获取最新和相邻的记录?

Google app engine 如何从数据存储中获取最新和相邻的记录?,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,我有电影数据存储,每个记录都有自己的id作为密钥名,如下所示: 12345 32453 12154 78873 34543 movies = Movies.query() movies.order(-Movies.added) for movie in movies.fetch(1): self.response.out.write(movie.key.id()) next_movie = Movies.query(Movies.added < movie.added) nex

我有电影数据存储,每个记录都有自己的id作为密钥名,如下所示:

12345
32453
12154
78873
34543
movies = Movies.query()
movies.order(-Movies.added)
for movie in movies.fetch(1):
    self.response.out.write(movie.key.id())
next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get()
if next_movie:
    next_url = next_movie.key.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(-Movies.added)
prev_movie = prev_movie.get()
if prev_movie:
    prev_url = prev_movie.key.id()
else:
    prev_url = ''
我想让用户浏览电影一个接一个。首先,应该显示最新的电影(数据库中添加了带有日期和时间的字段
)。如何从数据存储中获取?
Upd.我可以像下面这样做:

12345
32453
12154
78873
34543
movies = Movies.query()
movies.order(-Movies.added)
for movie in movies.fetch(1):
    self.response.out.write(movie.key.id())
next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get()
if next_movie:
    next_url = next_movie.key.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(-Movies.added)
prev_movie = prev_movie.get()
if prev_movie:
    prev_url = prev_movie.key.id()
else:
    prev_url = ''
但我不喜欢它-为了得到关键我要求整个记录

其次,如果显示了其他电影(例如12154),用户应该能够转到上一部电影(ID32453)和下一部电影(ID78873)。当然,如果最后一部电影上映,就不会有下一部电影;如果第一部电影上映,就不会有上一部电影了。所以,问题是如何获得下一部和上一部电影的关键名称? Upd。如果当前显示的电影是12154,那么我应该为上一部电影生成
example.com/movie/32453
,为下一部电影生成
example.com/movie/78873
等链接

Upd。我尝试过以下方法:

12345
32453
12154
78873
34543
movies = Movies.query()
movies.order(-Movies.added)
for movie in movies.fetch(1):
    self.response.out.write(movie.key.id())
next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get()
if next_movie:
    next_url = next_movie.key.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(-Movies.added)
prev_movie = prev_movie.get()
if prev_movie:
    prev_url = prev_movie.key.id()
else:
    prev_url = ''

首先,您的电影实体需要一个表示“迟到”的属性,例如,电影插入数据库时的日期字段

然后在此字段上使用降序排序的查询


要跳到下一个/上一个,您应该使用以下代码:

next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get(keys_only = True)
if next_movie:
    next_url = next_movie.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(Movies.added)
prev_movie = prev_movie.get(keys_only = True)
if prev_movie:
    prev_url = prev_movie.id()
else:
    prev_url = ''
return next_url, prev_url
next\u movie=Movies.query(Movies.addedmovie.added)
prev_movie=prev_movie.order(Movies.added)
prev_movie=prev_movie.get(仅限键=True)
如果是上一部电影:
prev_url=prev_movie.id()
其他:
上一个url=“”
返回下一个url,上一个url

你的问题应该更具体一点。你在使用什么JDO、Objectify、DataNuclaus、低级访问、待定?从标记判断,他在使用Python NDB。@user1258245,是的,我使用NDB。他在问题中已经说过他有一个“添加”字段。我已经更新了关于第一部分的问题。如何仅应用
Movies.query(keys\u only=True)
不起作用-意外的关键字参数'keys\u only'。好的,我应该像
fetch(1,keys\u only=True)
一样应用它。关于第二部分-看起来游标对我不起作用,因为我应该生成人类可读的URL,而
。urlsafe()
不起作用。