2011-12-30 4 views
2

私は、指定されたモデルの最初のn個のエンティティで始まるページをレンダリングしようとしています。ページは定期的に新しいアイテムをチェックします。たとえば、twitterがつぶやきのページをレンダリングし、利用可能なときに「新しい6つのつぶやき」を表示する方法と同様に、私は更新のための要求を受信すると、タイムスタンプと、私はそのタイムスタンプの前にアイテムをフィルタリングするクエリを実行し、将来のクエリの実行でend_cursorとして使用できるように、クエリの先頭にカーソルを置くことは可能ですか?

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()との代わりに、フェッチ()それは私が以前から開始ポイントまで私のすべての項目をつかむようにします。

私は0個のエンティティをフェッチしてカーソルを見ようとしましたが、それは空の文字列を返します。

これは可能ですか(可能であれば、タイムスタンプ方式よりもかなり高速です)。どんな提案や助言?

+1

'query.with_cursor()'は最初のパラメータとして開始カーソルが必要です。 'end_cursor'を渡しているだけなので、うまくいきません。 – systempuntoout

答えて

0

インデックスの先頭にある要素の代わりに、最後にカーソルがありますか?これにより、モデルの最新のエンティティになるのに役立ちます(クエリの最後の要素の後に有効なカーソルがあるかどうかわかりません)。次に更新を引っ張っているときに、そのカーソルからクエリを開始し、最新のエンティティを取得します。

私はこれを自分で試したことはありませんが、うまくいく可能性があります。試してみて、それがどうなるか教えてください。

関連する問題