python - 使用 nosql 排名在 SQLalchemy 中排序和分页

标签 python flask pagination sqlalchemy flask-sqlalchemy

我有一个 python 算法,它返回给定用户的数据库行的排名顺序。该算法输出一个主键 ID 列表(这些键可以与 post.id 连接)。它看起来像下面,除了可能有数千个匹配项:

result_rank = [1286, 1956, 6759, 3485, 2309, 3409, 9023, 912, 13098, 23489, 19023, 1239]

我想指示 sqlalchemy 选择这些行,并按照它们在列表中的顺序对它们进行排序。问题是我想执行 pagination对此

results = posts.query().filter(posts.id.in_(
    resultIds)).order_by(??? how can I order by post.id = result_rank ???).paginate(page_num, posts_per_page)

我正在使用 Postgresql 作为数据库。

最佳答案

除非有好的解决方案,否则我将拼凑我自己的分页对象:

class paginate_obj:

    """ Pagination dummy object. Takes a list and paginates it similar to sqlalchemy paginate() """
    def __init__(self, paginatable, page, per_page):
        self.has_next = (len(paginatable)/per_page) > page
        self.has_prev = bool(page - 1)
        self.next = page + self.has_next
        self.prev = page - self.has_prev
        self.items = paginatable[(page-1)*(per_page):(page)*(per_page)]

我认为进行排序的唯一方法是创建所有结果的列表并根据某个 lambda 函数在 python 中对其进行排序:

results = my_table.query().all()
results.sort(key=lamba x: distance(x.lat, x.long, user_lat, user_long)
paginated_results = paginate_obj(results, 1, 10) #returns the first page of 10 elements

关于python - 使用 nosql 排名在 SQLalchemy 中排序和分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560397/

相关文章:

python - OpenCV:排序圆数组

python - 保存 ImageField mongoengine

python - Flask-WTForms RadioField 自定义验证器消息不起作用

python - 另一个 Flask/AWS WSGIPath 错误,特别是 : WSGIPath refers to a file that does not exist

python - 在 Python 中使用 P 值进行 F 检验

python - 在文本浏览器中使用 Django 的 https 站点抛出 CSRF 验证失败

python - Gunicorn 对某些(但不是全部)flask 模块抛出 ModuleNotFound

php - 拉维尔 4 : How to make pagination

python - 如何使用 moto 模拟 DynamoDB 分页?

php - 如何在 PHP 中对 SHOW TABLES 查询的结果应用分页