无效的 SQL 数据类型 (0) (SQLBindParameter)')

Invalid SQL data type (0) (SQLBindParameter)')

提问人:Usman Rafiq 提问时间:6/9/2022 更新时间:8/4/2023 访问量:577

问:

我正在尝试使用 PYODBC 包将 Pandas 数据帧插入 SQL 表。但是当我运行代码时,它说

错误: ('HY004', '[HY004] [Microsoft] [ODBC SQL Server 驱动程序] 无效的 SQL 数据类型 (0) (SQLBindParameter)')

列类型正常。

以下是详细信息

法典

for index, row in final_df.iterrows():
 print(row)
 cursor.execute("INSERT INTO CourseOutline ([ActivityTypeID] ,[ActivityID],[Sequence],[CourseTypeID] ,[Duration], [MinistryCode] ,[FGCCode] ,[Percentage],[ModuleID] ,[PageNo]) values(?,?,?,?,?,?,?,?,?,?)", final_df.ActivityType, final_df.DBID,final_df.Seq,final_df.CourseType,1,'MinistryCodes','FGCCodes',final_df.Percentage,final_df.Module,final_df.PgNo)

 cnxn.commit()
cursor.close()

DataFrame 列类型Dataframe column Types

SQL 列类型SQL Column Types

First 3 Records of dataframe

python-3.x pandas pyodbc

评论

0赞 Ze'ev Ben-Tsvi 6/9/2022
我认为“Duration”值应该是 1.0(这是一个浮点数)而不是 1(这是一个整数)
0赞 Usman Rafiq 6/9/2022
@Ze'evBen-Tsvi 感谢您的回复。持续时间已在 float64 中
0赞 Gord Thompson 6/10/2022
可能与:stackoverflow.com/a/72419953/2144390 TL;DR - 只需使用 pandas 的 to_sql() 方法

答:

3赞 vindevoy 8/4/2023 #1

我遇到了同样的错误,对我来说,这个问题的答案是有效的:

使用 pandas 将行插入 Microsoft SQL Server 会引发精度错误

我将驱动程序从“SQL Server”更改为“ODBC Driver 17 for SQL Server”

此外,最初,这在我的 Pandas 1.x 的 Python 环境中对我有用,但当我切换到 Pandas 2.0 时它停止了工作。我不得不更改驱动程序以使其在两个版本的 Pandas 中工作