基于外部排名的SQLAlchemy查询结果重新排序

ORM查询(例如MyObject.query())的结果需要根据基于不在数据库内的值的排序算法(即从单独的搜索引擎)进行排序。 这意味着'order_by'将不起作用,因为它只对数据库中的字段进行操作。

但是,我不想将查询结果转换为列表,然后重新排序,因为我想保持向查询添加更多约束的能力。 例如:

results = MyObject.query()
results = my_reorder(results)
results = results.filter(some_constraint)

这可能通过SQLAlchemy完成吗?


恐怕你不能这样做,除非可以从数据库中对象的表格和/或相关对象的表格的字段中派生出来。

但是你可以从你的代码中返回元组(query, order_func/result) 。 在这种情况下,查询仍然可以被扩展,直到它被执行,然后使用。 或者你可以创建一个类似于Proxy的小类,它将包含这个元组,并将查询扩展方法委托给查询,并将查询执行方法( all(), __iter__ ,...)委托给查询并应用执行时排序。

另外,如果您可以事先计算每个MyObject实例的值,则可以使用值向查询添加literal列,然后使用order_by按顺序排序。 或者,添加临时表,使用计算出的排序值添加行,在查询中加入它并添加排序。 但我想这些增加了复杂性,而不是他们带来的好处。

链接地址: http://www.djcxy.com/p/38717.html

上一篇: Reorder of SQLAlchemy Query results based on external ranking

下一篇: django filter with list of values