PyODBC 中的存储过程写道:字符串格式化期间并非所有参数都转换
Posted
技术标签:
【中文标题】PyODBC 中的存储过程写道:字符串格式化期间并非所有参数都转换【英文标题】:Stored procedure in PyODBC writes: not all arguments converted during string formatting 【发布时间】:2022-01-22 21:09:34 【问题描述】:我有这个代码:
with connections["mssql_database"].cursor() as cursor:
sql = "EXEC SaveActivity @id_workplace=?, @personal_number=?, @id_activity=?"
params = (id_workplace, personal_number, id_activity)
cursor.execute(sql, params)
TypeError: not all arguments converted during string formatting
当我尝试时
cursor.callproc("SaveActivity", [id_workplace, personal_number, id_activity])
它写道:
AttributeError: 'pyodbc.Cursor' object has no attribute 'callproc'
【问题讨论】:
【参考方案1】:出现此错误是因为您传递的参数与 SQL Server 中数据库端定义的类型不匹配。
@id_workplace
、@personal_number
和 @id_activity
都是整数吗?如果是这样,Python 变量 id_workplace
、personal_number
和 id_activity
是否都是整数? Python 变量的值是什么?如果其中任何一个是None
,则需要确保相应的数据库变量允许NULL
。
【讨论】:
id_workplace
是整数,personal_number
是字符串,id_activity
是整数。他们不是None
。
变量比较多,为了简单我只写了三个。有整数、字符串和日期时间。
这是有道理的。您需要做的是检查所有 Python 变量,并确保它们的类型(整数或字符串)与存储过程的预期相匹配。我想如果你把它们都看一遍,你会发现一个(或多个)它们不匹配的地方,很可能是从 Python 传递一个字符串到存储过程中的一个整数。我以前也遇到过。以上是关于PyODBC 中的存储过程写道:字符串格式化期间并非所有参数都转换的主要内容,如果未能解决你的问题,请参考以下文章
无法使用存储过程pyodbc SQL SERVER创建数据库
将Datetime作为参数传递给PyODBC的存储过程时出错