Python 3.X向Oracle 11.2g导入Excel数据时尾零问题求助
解决Excel数据导入Oracle时的数字格式与类型错误问题
你在将Excel数据导入Oracle 11.2g时遇到的两个问题,我帮你梳理下解决方案:
问题根源拆解
- TypeError报错原因:
Excel里的数值常以浮点数类型存储(哪怕看起来是整数),如果遇到空单元格(值为None)或者非整数的浮点数,直接用int()转换就会抛出异常,导致后续executemany执行失败。 - 带
.0后缀的原因:
直接把浮点数转字符串时,Python会保留浮点数的格式,比如210374245.0会被转成"210374245.0",不符合数据库字段的格式要求。
实用解决方案:自定义数值清理函数
我们可以写一个小函数,针对性处理Excel里的数值,既避免转换异常,又能去掉多余的.0后缀:
def clean_excel_numeric_value(value): # 处理空单元格,返回空字符串(可根据需求改成0或None) if value is None: return '' # 把浮点数类型的整数转成纯整数格式的字符串 elif isinstance(value, float) and value.is_integer(): return str(int(value)) # 原生整数直接转字符串 elif isinstance(value, int): return str(value) # 其他情况(比如带小数的数值、文本)直接转字符串并去空格 else: return str(value).strip()
然后在读取Excel数据时调用这个函数:
sku = clean_excel_numeric_value(worksheet.cell(r, 0).value) color = clean_excel_numeric_value(worksheet.cell(r, 1).value)
这样处理后,210374245.0会变成"210374245",3985.0变成"3985",同时也能避免空值或非整数浮点数导致的转换异常。
额外提示
如果你的Oracle字段是数值类型(而非字符类型),可以去掉函数里的str()转换,直接返回整数类型,但要注意空值场景返回符合字段要求的默认值(比如0或者None,取决于字段是否允许为空)。
内容的提问来源于stack exchange,提问作者redsoxlost
相关产品推荐
相关产品推荐

