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 条评论
暂无评论