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

Python中ADO GetRows读取SQL数值时小数分隔符为逗号的问题解决

解决ADODB读取SQL Server时数值列因区域设置变为字符串的问题

你的问题核心是瑞典语系统的区域设置(默认用逗号做小数分隔符)导致ADODB返回的数值被格式化为带逗号的字符串,而非原生数值类型。以下是几种可行的解决办法:

方法1:在连接字符串中指定区域ID(推荐)

直接在ADODB连接字符串里添加Locale Identifier=1033(1033对应英文-US区域,强制用点作为小数分隔符),从数据源层面避免格式转换问题。

修改后的连接代码:

adoConn.Open("Provider = SQLOLEDB; Data Source = {}; Integrated Security = SSPI; Locale Identifier=1033".format(datasource_))

这样ADODB会以英文区域格式返回数值,读取后直接是数值类型,无需额外转换。

方法2:读取后手动转换数值类型

如果无法修改连接字符串,可以在构建DataFrame时,根据ADODB返回的字段类型,将带逗号的字符串转换为数值:

修改函数的返回部分:

df = pd.DataFrame(data=data, columns=cols)
# 定义ADODB数值类型对应的ID(常见数值类型)
numeric_field_types = {3, 5, 13, 14}  # adInteger=3, adDouble=5, adNumeric=13, adDecimal=14
for col_idx, col_name in enumerate(cols):
    if data_type[col_idx] in numeric_field_types:
        # 替换逗号为点后转换为数值
        df[col_name] = pd.to_numeric(df[col_name].str.replace(',', '.'), errors='coerce')
return {'data': df, 'data_type': data_type}

方法3:临时修改Python运行时区域设置

在代码开头添加区域设置代码,强制Python使用英文数值格式:

import locale
# 切换到英文-US区域(需系统已安装该语言包)
try:
    locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
except locale.Error:
    print("系统未安装en_US区域包,无法使用此方法")

注意:该方法依赖系统已安装对应语言包,兼容性不如前两种。

内容的提问来源于stack exchange,提问作者k.dkhk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:33:14