Pandas datetime64列导出Oracle被识别为DATE类型丢失时间精度如何解决
问题原因
你当前的dtype配置仅针对object类型的列指定了VARCHAR映射规则,DateStamp列是datetime类型未被包含在内,pandas搭配Oracle驱动的默认映射规则会将pandas datetime类型转换为Oracle的DATE类型,该类型无法存储毫秒及更高精度的时间信息,因此出现精度丢失。
解决方法
步骤1:显式指定DateStamp列的数据库类型为TIMESTAMP
在你现有生成dtyp2的代码后,新增一行代码手动指定DateStamp列的映射类型,适配Oracle的TIMESTAMP精度要求:
# 你原有的dtype生成逻辑不变 dtyp2 = {c:types.VARCHAR(final_df_toDB[c].str.len().max()) for c in final_df_toDB.columns[final_df_toDB.dtypes == 'object'].tolist()} # 新增:指定DateStamp列为TIMESTAMP,precision=6对应支持微秒级存储,匹配你生成的时间戳精度 dtyp2['DateStamp'] = types.TIMESTAMP(precision=6) # 后续to_sql逻辑不变 final_df_toDB.to_sql('sample_table',engine_conn, if_exists='append', index=False, dtype=dtyp2)
如果运行时提示TIMESTAMP未定义,确认你已经引入了sqlalchemy的类型包:from sqlalchemy import types。
步骤2:处理已存在的表结构(可选)
如果sample_table已经创建且DateStamp列当前是DATE类型,需要先执行SQL修改字段类型,否则即使指定了dtype也会沿用原有表的字段规则导致精度丢失:
ALTER TABLE sample_table MODIFY (DateStamp TIMESTAMP(6));
调整后即可正常插入完整精度的时间戳信息。
内容的提问来源于stack exchange,提问作者bzflag
相关产品推荐
相关产品推荐

