为什么 SQLAlchemy 的 order_by 不对 URL 进行排序?

问题描述 投票:0回答:1

我正在使用 SQLAlchemy 开发 Flask 应用程序,我需要对数据库中存储的 URL 进行一致的排序。目标是使竞争对手 URL 的顺序保持一致,以便在将产品与相同竞争对手进行比较时,URL 的顺序是相同的,无论它们是以 http:// 还是 https:// 开头。

  • 我使用 SQLite 作为测试数据库。
  • 竞争对手模型有一个 url 列定义为 db.String(256),我正在尝试按此列进行排序。
  • 我目前的做法是:
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()
)

不幸的是,这并没有达到预期效果。

python-3.x sql-order-by flask-sqlalchemy
1个回答
0
投票

更新:经过一系列测试,排序异常的问题是由于将查询结果直接赋值给关系属性

competitors
而导致的。当查询结果分配给单独的变量(例如,
product_competitors
)时,排序将按预期进行。

© www.soinside.com 2019 - 2024. All rights reserved.