レコードの前後のデータを取得する

「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