线上405错误:AttributeError: 'Timestamp' object has no attribute 'translate

1、背景:

本地接口测试正常,线上报错。

2、代码

……
cur_time = datetime.now()
start_time = cur_time.replace(hour=0, minute=0, second=0, microsecond=0)
end_time = cur_time.replace(minute=0, second=0, microsecond=0) + pd.DateOffset(hours=1)
……
 query_sql = text(f"""
                select value, receivetime
                from `{table_name}`
                where test_id in :test_list
                and receivetime between :start_time and :end_time;
            """)
params = {'test_list': test_list, 'start_time': start_time, 'end_time': end_time}
data_df = pd.read_sql(sql=query_sql, con=conn, params=params)
………
result_dict = data_df.to_dict(orient='records')
……
  • 代码分析
    • start_time和end_time是datetime类型
    • sql用的sqlalchemy参数化查询。
    • 执行sql用的panda

3、chatgpt查找报错原因:

这个错误表明你尝试在一个 Timestamp 对象上调用 translate 属性,但是 Timestamp 对象本身并没有 translate 这个属性。 可能的原因是在你的代码中,你可能误将一个 Timestamp 对象当作了字符串,并尝试调用字符串的 translate 方法,而 Timestamp 对象并不具备这个方法。

4、修改

  • 尝试1:根据chatgpt的反馈修改将start_time和end_time转为字符串类型,用的strftime(): 结果依然报错。

  • 尝试2:怀疑to_dict操作可能见datetime转为了字符串类型,所以修改data_df['receivetime'] = data_df['receivetime'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))结果依然报错。

  • 尝试3:放弃参数化查询,直接将参数传递给sql。 结果成功!

    query_sql = text(f""" select value, receivetime from {table_name} where test_id in :test_list and receivetime between '{start_time}' and '{end_time}'; """) params = {'test_list': test_list}


发表评论

评论列表,共 0 条评论

    暂无评论