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

Python datetime与DataFrame object类型日期匹配失效问题

出错原因

代码始终返回FAIL是两类问题叠加导致的,你猜测的类型差异只是潜在风险,并非当前故障的核心原因:

  • 核心逻辑错误:actual_dates["contact_date"].any()的返回值是布尔类型(True/False)。Series.any()的作用是判断序列中是否存在至少一个真值,不会返回序列里存储的实际日期值。你拿布尔值和datetime.date类型的correct_date做不等判断,结果永远为真,自然始终打印FAIL。
  • 笔误风险:你SQL中给日期列定义的别名是大写CONTACT_DATE,判断代码里写的是小写contact_date,默认配置下这行代码会直接触发KeyError,如果你的环境没有抛错,大概率是数据库连接配置自动做了列名小写转换。
  • 潜在类型兼容问题:你的猜测部分成立:不同数据库驱动读取DATE类型字段返回给pandas时,值的类型可能是字符串、numpy.datetime64,和Python原生datetime.date直接比较时,确实可能出现值相同但判定不等的情况,但这不是你当前代码失效的主要原因。
修正方案

按如下逻辑调整代码即可实现预期的校验效果:

  1. 先校验SQL返回的记录数,确认是否符合「仅1个日期值」的前提
  2. 提取列中的唯一日期值,统一做类型转换,消除跨类型比较的误差
  3. 对齐类型后再做等值判断

参考实现代码:

# 先校验返回结果数量是否符合预期
if len(actual_dates) != 1:
    print("FAIL")
else:
    # 注意列名和SQL别名保持一致,若你的环境自动转小写就替换为"contact_date"
    # 统一转换为datetime后取原生date类型,和correct_date类型对齐
    actual_date = pd.to_datetime(actual_dates["CONTACT_DATE"]).iloc[0].date()
    print("SUCCESS" if actual_date == correct_date else "FAIL")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:32