我正在使用 SQLAlchemy 开发 Flask 应用程序,我需要对数据库中存储的 URL 进行一致的排序。目标是使竞争对手 URL 的顺序保持一致,以便在将产品与相同竞争对手进行比较时,URL 的顺序是相同的,无论它们是以 http:// 还是 https:// 开头。
competitors = Competitor.query.filter_by(product_id=product.id).order_by(func.lower(Competitor.url).asc()).all()
尽管使用 order_by(func.lower(Competitor.url).asc()),排序似乎并不有效。无论我使用 asc() 还是 desc(),URL 都无法正确排序。
有没有办法使用 order_by 直接在 SQLAlchemy 查询中一致地对 URL 进行排序?如果不是,Python 方法是否是最好的替代方案,或者是否有更有效的方法来实现一致的 URL 排序?
我尝试获取所有竞争对手并在剥离 http:// 和 https:// 方案后对 URL 进行排序:
order_by(
func.lower(func.replace(Competitor.url, 'http://', '')).asc(),
func.lower(func.replace(Competitor.url, 'https://', '')).asc()
)
不幸的是,这并没有达到预期效果。
更新:经过一系列测试,排序异常的问题是由于将查询结果直接赋值给关系属性
competitors
而导致的。当查询结果分配给单独的变量(例如,product_competitors
)时,排序将按预期进行。