1

我有電影數據存儲,每個記錄有都有自己的ID爲重點的名字象下面這樣:如何從數據存儲獲取最新和相鄰的記錄?

12345 
32453 
12154 
78873 
34543 

我想允許用戶通過一個瀏覽的電影之一。首先,應該顯示最新的電影(數據庫具有日期和時間的字段added)。如何從數據存儲中獲取? Upd。我能做到象下面這樣:

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)。當然,如果顯示上一部電影,則不會有下一部電影;如果顯示第一部電影,則不會有先前的電影。所以,問題是如何獲得下一個和以前的電影的關鍵名稱? Upd。如果當前顯示的電影是12154,那麼我應該爲前一部電影創建鏈接,如example.com/movie/32453,爲下一部電影創建鏈接example.com/movie/78873

Upd。我已經試過類似如下:

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 
+0

你應該更具體一點與你的問題。你在使用JDO,Objectify,DataNucleaus,低級訪問,未定的東西? – user1258245 2012-08-06 05:25:18

+0

從他使用Python NDB的標籤判斷。 – 2012-08-06 06:21:18

+0

@ user1258245,是的,我使用NDB。 – 2012-08-06 15:01:15

回答

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 
2

首先,你需要在你的電影實體的屬性,將代表「遲到」,例如電影插入數據庫時​​提交的日期。

然後你應該在這個字段上使用降序排序查詢。

要跳到下一個/上一個,你應該使用Query Cursors

+0

他已經在問題中說過他有一個「加」字段。 – 2012-08-06 06:43:20

+0

我已經更新了關於第一部分的問題。我怎樣才能申請'keys_only'? 'Movies.query(keys_only = True)'不起作用 - 意外的關鍵字參數'keys_only'。 – 2012-08-06 15:49:34

+0

好的,我應該像'fetch(1,keys_only = True)'那樣應用。 – 2012-08-06 16:19:59

相關問題