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

Python导入Teradata日期报错:空日期列及日期格式不兼容问题咨询

解决方案

问题1:3个空日期列需为空上传的实现方法

报错根源是空值类型不匹配,按以下步骤调整即可:

  • 创建空日期列时不要使用空字符串""或直接传入None,要明确指定列为datetime类型,空值用pandas原生的NaT(对应SQL的日期NULL值),创建代码如下:
    import pandas as pd
    # 插入空日期列时直接指定dtype为datetime,生成的空值就是标准NaT格式
    df.insert(5, "ACTIVE_DATE", pd.Series(dtype='datetime64[ns]'))
    
  • 若已经生成了object类型的空日期列,先统一做类型转换,把所有非法值转为NaT:
    # 对3个空日期列都执行该操作
    df['ACTIVE_DATE'] = pd.to_datetime(df['ACTIVE_DATE'], errors='coerce')
    
  • 调用to_sql时添加dtype参数,明确告知sqlalchemy这几列是日期类型,避免驱动自动推断类型出错:
    from sqlalchemy.types import DATE
    
    eng = sqlalchemy.create_engine('teradatasql://user:pass@host')
    df.to_sql(
        name='Sales_DB',
        con=eng,
        if_exists='append',
        index=False,
        schema='sales',
        # 此处把3个空日期列都加上类型声明
        dtype={
            "ACTIVE_DATE": DATE(),
            "你的第二列空日期名称": DATE(),
            "你的第三列空日期名称": DATE()
        }
    )
    

问题2:DD/MM/YYYY格式Python导入失效的原因

其他非Python的导入工具(比如Teradata自带的FastLoad、BTEQ等)会自动读取当前Teradata实例的会话日期格式配置,多数业务场景下Teradata默认会话格式为DD/MM/YYYY,因此可以直接识别该格式的日期值。
而Python的teradatasql驱动搭配pandas的to_sql方法时,默认遵循ISO日期序列化标准,仅识别YYYY-MM-DD格式的日期值,不会主动适配Teradata实例的本地日期格式配置,因此直接传入DD/MM/YYYY格式的字符串会被判定为非法日期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:30:03