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

Flask API运行报错:TypeError: datetime.date无法适配int对象

解决Flask降水API的TypeError报错

报错根源

报错指向代码第57行,核心是两处拼写错误直接触发类型错误:

  1. datetime.ddatetime.strptime 多写了一个d,正确写法为datetime.datetime.strptime
  2. datetime.timedelata 拼写错误,正确为datetime.timedelta

此外还有一处潜在问题:数据库中Measurement.date是字符串格式,直接用Python date对象比较可能出现类型不匹配,建议用SQLAlchemy的func.strftime统一格式后再过滤。

修复后的完整precipitation路由代码

@app.route("/api/v1.0/precipitation")
def precipitation():
    session = Session(engine)
    
    last_date = session.query(func.max(Measurement.date)).scalar()
    
    # 修正拼写错误:ddatetime -> datetime
    last_date_obj = datetime.datetime.strptime(last_date, '%Y-%m-%d').date()
    
    # 修正拼写错误:timedelata -> timedelta
    one_year_ago = last_date_obj - datetime.timedelta(days=365)
    
    # 转换为字符串格式,避免类型不匹配
    one_year_ago_str = one_year_ago.strftime('%Y-%m-%d')
    
    # 用func.strftime统一日期格式后过滤
    precipitation_data = session.query(Measurement.date, Measurement.prcp)\
        .filter(func.strftime('%Y-%m-%d', Measurement.date) >= one_year_ago_str)\
        .all()
    
    session.close()
    
    precipitation_dict = {date: prcp for date, prcp in precipitation_data}
    
    return jsonify(precipitation_dict)

额外优化建议

  • 处理prcp为None的情况,避免JSON序列化问题:
    precipitation_dict = {date: prcp if prcp is not None else 0 for date, prcp in precipitation_data}
    
  • 参考Jupyter Notebook逻辑,对每日降水取最大值,避免同一日期多条数据:
    precipitation_data = session.query(Measurement.date, func.max(Measurement.prcp))\
        .filter(func.strftime('%Y-%m-%d', Measurement.date) >= one_year_ago_str)\
        .group_by(Measurement.date)\
        .all()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:53:15