You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask SQLAlchemy如何实现不区分大小写的distinct多字段去重查询

实现font_name字段大小写不敏感去重的代码调整方案

要实现需求,核心逻辑是在distinct子句中对PublicationFont.font_name调用SQL大小写转换函数,统一转为全小写/全大写后再参与去重判断,SQLAlchemy中可通过内置的func对象调用对应数据库的转换函数。

修改后的代码如下:

# 需先导入sqlalchemy的func模块
from sqlalchemy import func

PublicationFont.query.filter(
    (PublicationFont.publication_id == id) | (PublicationFont.is_public == include_public)
).distinct(
    func.lower(PublicationFont.font_name), # 对font_name转小写后参与去重,自动合并仅大小写不同的重复项
    PublicationFont.font_family,
    PublicationFont.font_style,
    PublicationFont.font_weight
).order_by(
    func.lower(PublicationFont.font_name).asc(), # 若需要排序也忽略大小写可保留这行,否则换回原写法即可
    PublicationFont.font_weight.desc()
)

补充说明

  • 该写法兼容PostgreSQL、MySQL等绝大多数主流数据库,底层会自动映射为对应数据库的LOWER()函数执行
  • 仅去重需要忽略大小写、排序不需要的话,把order_by中的func.lower去掉,保留原PublicationFont.font_name.asc()即可,不影响去重效果

内容的提问来源于stack exchange,提问作者Rohan Keskar18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:15:03