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

Python查询MySQL去重日期列表:结果重复且格式不符合预期

优化方案:分场景实现目标格式的去重日期列表

方案1:优先推荐——数据库层完成去重+格式化,效率最高

你之前的写法需要拉取全表数千条重复记录回Python端处理,完全可以把去重、格式化的逻辑下推到MySQL层执行,仅返回最终需要的结果,大幅降低传输和计算开销。

对应调整后的查询逻辑:

mycursor.execute("""
    SELECT DISTINCT DATE_FORMAT(date, '%Y/%m/%d')
    FROM db_cryptoprice
    -- 如需按日期正序排列,可追加排序规则
    ORDER BY 1
""")
# 将返回的单元素元组拆解为纯字符串列表
date_list = [row[0] for row in mycursor.fetchall()]
print(date_list)

返回结果直接符合预期格式:

['2021/04/18', '2021/04/19', '2021/04/20', '2021/04/21']

说明:DATE_FORMAT(date, '%Y/%m/%d')会自动将月份、日期补零为两位,输出斜杠分隔的标准格式,和需求完全匹配。

方案2:基于已拉取的全量date数据做Python端处理

如果你已经完成了全量数据拉取,拿到了形如[(datetime.date(2021, 4, 18),), (datetime.date(2021, 4, 19),)...]的原始结果,只需要两步就能处理成目标格式:

  1. 拆解元组、对date对象去重
  2. 将date对象格式化为要求的字符串格式

对应代码:

# 原始查询得到的test变量为fetchall返回的元组列表
mycursor.execute("SELECT DATE(date) FROM db_cryptoprice")
test = mycursor.fetchall()

# 1. 提取元组内的date对象并去重,无需保序可直接用集合提升效率
# 如需保留日期首次出现的顺序,替换为dict.fromkeys的写法
unique_date_objs = {row[0] for row in test}
# 2. 格式化date对象为 年/月/日 的两位补零格式
date_list = [d.strftime('%Y/%m/%d') for d in unique_date_objs]

之前代码的问题说明

你之前使用list(dict.fromkeys(test))时,是把整个单元素元组作为去重的键,没有提取元组内部的date对象,所以得到的列表元素依然是带逗号的元组结构,无法直接得到格式化字符串。


内容的提问来源于stack exchange,提问作者A. Prats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:15:07