在 Python 中使用 pyodbc 时出现“强制转换规范的字符值无效”

Vil*_*ius 5 python pyodbc

我制作了一个连接到 Mssql 数据库并在那里插入一些内容的 python 脚本。

问题出在这一行:

cursor.execute("insert into TREND_DATA (TREND_ID, TREND_DATE, TREND_VALUE) values ((select TREND_ID from TRENDS where TREND_NAME = ?), ?, ?)", name, date, trend_value)
Run Code Online (Sandbox Code Playgroud)

在此行之后我收到此错误:

cursor.execute("insert into TREND_DATA (TREND_ID, TREND_DATE, TREND_VALUE) values ((select TREND_ID from TRENDS where TREND_NAME = ?), ?, ?)", name, date, trend_value)
pyodbc.DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) (SQLExecDirectW)')
Run Code Online (Sandbox Code Playgroud)

我尝试用“abc”代替“名称”,但出现了相同的错误”

cursor.execute("insert into TREND_DATA (TREND_ID, TREND_DATE, TREND_VALUE) values ((select TREND_ID from TRENDS where TREND_NAME = ?), ?, ?)", 'abc', date, trend_value)
Run Code Online (Sandbox Code Playgroud)

然而,这条线有效,我在数据库中得到了新行:

cursor.execute("insert into TREND_DATA (TREND_ID, TREND_DATE, TREND_VALUE) values ((select TREND_ID from TRENDS where TREND_NAME = 'abc'), ?, ?)", date, trend_value)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Gor*_*son 3

pyodbc 4.0.22 中引入的更改在使用查询参数时导致了几个不同的错误。这些问题已通过 pyodbc 4.0.23 的发布得到解决。