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
相关产品推荐
相关产品推荐

