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

使用pandas to_sql()向SQL Server插入浮点数未显示小数位问题

问题原因及解决方法

核心原因

  1. pandas显示格式不影响实际存储:你设置的pd.options.display.float_format只是控制DataFrame打印时的展示样式,不会改变数据本身的精度。比如100.0在DataFrame里还是float类型的100,并非带四位小数的固定精度数值。
  2. Float()类型不匹配SQL Server需求:你用的Float()是pandas的可空浮点类型,对应到SQL Server后还是默认的float类型——这是近似数值类型,存储时不会强制保留小数位数,显示时会自动省略末尾的零。
  3. SQL Server表字段类型未指定小数精度:如果表中Price、Value字段是float类型,SQL Server只会存储数值的近似值,不会按四位小数的格式保留。

解决方法

  • 修改SQL Server表字段类型(推荐):直接把Price、Value字段改成DECIMAL(18,4)或NUMERIC(18,4),这两种是精确数值类型,能强制保留4位小数。
  • 在to_sql中指定SQLAlchemy的精确数值类型:导入SQLAlchemy的Numeric类型,替代pandas的Float(),示例代码:
    from sqlalchemy import Numeric
    df.to_sql(
        name="your_table_name",
        con=your_engine,
        dtype={
            "Price": Numeric(precision=18, scale=4),
            "Value": Numeric(precision=18, scale=4)
        },
        if_exists="append"  # 根据需求选replace/append等
    )
    
  • (不推荐)转成字符串存储:如果只需要展示格式,可将数值转成带四位小数的字符串后插入,但这种方式会丢失数值计算能力,仅适合纯展示场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:04:59