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

pandas dataframe.to_sql在Jupyter正常但VSCode报错的问题解决

解决sqlalalchemy+pyodbc写入SQL Server时的HY104无效精度值错误

问题背景

一段操作SQL Server的Python代码在Anaconda根环境的Jupyter Notebook中运行正常,但将相同代码放到新创建的虚拟环境(VSCode或新Jupyter虚拟环境)执行时,df_clean.to_sql()行抛出HY104错误,提示“无效的精度值”(对应错误信息中的意大利语“Valore di precisione non valido”)。

运行代码

import pyodbc
import sqlalchemy

user_id = 'userid'
password = 'password'
server = 'server'
database_name = 'database_name'
driver = 'SQL Server'

connection_string = (
           f'DRIVER={{{driver}}};'
           f'SERVER={server};'
           f'DATABASE={database_name};'
           f'UID={user_id};'
           f'PWD={password};')

conn = pyodbc.connect(connection_string)

cursor = conn.cursor()

cursor.execute("TRUNCATE TABLE [Startup];")

conn.commit()

connection_string = f'mssql+pyodbc://{user_id}:{password}@{server}/{database_name}?driver={driver}'

engine = sqlalchemy.create_engine(connection_string)

df_clean.to_sql('Startup', engine, if_exists='replace', index=False)

conn.commit()

报错信息

(pyodbc.Error) ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Valore di precisione non valido. (0) (SQLBindParameter)')
[SQL: SELECT [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME]
FROM [INFORMATION_SCHEMA].[TABLES]
WHERE ([INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS NVARCHAR(max)) OR [INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS NVARCHAR(max))) AND [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] = CAST(? AS NVARCHAR(max)) AND [INFORMATION_SCHEMA].[TABLES].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max))]
[parameters: ('BASE TABLE', 'VIEW', 'Startup', 'dbo')]

排查细节

  • 新环境中TRUNCATE语句执行正常,已确认df_clean数据无异常
  • 环境差异对比:仅Anaconda根环境(预装数千个包)能正常运行,新虚拟环境(仅安装项目依赖包)出现错误
  • 排除常见原因:根环境中相同数据可正常写入,排除数据与表结构不匹配的问题

最终解决方法

在创建sqlalchemy引擎时添加use_setinputsizes=False参数,修改后的代码片段:

engine = sqlalchemy.create_engine(connection_string, use_setinputsizes=False)

添加该参数后,代码在新虚拟环境中可正常执行to_sql操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:40:22