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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:54:04