レコードの前後のデータを取得する
「pubdate」「modified_at」「id」の3つのフィールドをキーにソートして、特定のレコードの前後を取得する。
def get_neighbors(entry): query = Session.query(DiaryModel) # get neighbors peers = query.filter_by(pubdate=entry.pubdate)\ .order_by(DiaryModel.modified_at, DiaryModel.id).all() entry_idx = [ i for i, p in enumerate(peers) if p.id==entry.id ][0] if entry_idx==0: older = query.filter(DiaryModel.pubdate<entry.pubdate)\ .order_by(desc(DiaryModel.pubdate), desc(DiaryModel.modified_at), desc(DiaryModel.id)).first() else: older = peers[entry_idx-1] if entry_idx==len(peers)-1: newer = query.filter(DiaryModel.pubdate>entry.pubdate)\ .order_by(DiaryModel.pubdate, DiaryModel.modified_at, DiaryModel.id).first() else: newer = peers[entry_idx+1] return [older, newer]
もっと良い方法があるだろうか?
posted by id:junya_hayashi