1

我有电影数据存储,那里的每条记录都有自己的 id 作为键名,如下所示:

12345
32453
12154
78873
34543

我想允许用户一一浏览电影。首先,应该显示最新的电影(数据库有added日期和时间字段)。如何从数据存储中获取它? 更新。我可以这样做:

movies = Movies.query()
movies.order(-Movies.added)
for movie in movies.fetch(1):
    self.response.out.write(movie.key.id())

但我不喜欢它——为了得到钥匙,我要求整张唱片。

其次,如果显示了其他电影(例如,12154),用户应该能够转到上一部电影(id 32453)和下一部电影(id 78873)。当然,如果放映了上一部电影,就没有下一部电影了;如果播放第一部电影,则不会有上一部电影。那么,问题是如何获取下一部电影和上一部电影的关键名称? 更新。如果当前显示的电影是 12154,那么我应该example.com/movie/32453为上一部电影和example.com/movie/78873下一部电影生成链接。

更新。我尝试过如下方法:

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_url似乎还可以,但prev_url总是一样。这是我的测试数据库内容(-Movies.added顺序):

id      added
503035: 2012-08-05 19:49:51.259000
475537: 2012-08-05 19:49:51.238000
677539: 2012-08-05 19:49:51.218000
566355: 2012-08-05 19:49:51.197000
557850: 2012-08-05 19:49:51.176000
670146: 2012-08-05 19:49:51.155000
581030: 2012-08-05 19:49:51.135000
464561: 2012-08-05 19:49:51.114000
507817: 2012-08-05 19:49:51.092000
4

2 回答 2

2

首先,您需要电影实体上的一个属性来表示“迟到”,例如电影插入数据库时​​提交的日期。

然后你应该在这个字段上使用降序查询。

要跳到下一个/上一个,您应该使用Query Cursors

于 2012-08-06T06:26:06.387 回答
1

以下代码运行良好:

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
于 2012-08-07T17:33:37.920 回答