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_workplacepersonal_numberid_activity 是否都是整数? Python 变量的值是什么?如果其中任何一个是None,则需要确保相应的数据库变量允许NULL

【讨论】:

id_workplace 是整数,personal_number 是字符串,id_activity 是整数。他们不是None 变量比较多,为了简单我只写了三个。有整数、字符串和日期时间。 这是有道理的。您需要做的是检查所有 Python 变量,并确保它们的类型(整数或字符串)与存储过程的预期相匹配。我想如果你把它们都看一遍,你会发现一个(或多个)它们不匹配的地方,很可能是从 Python 传递一个字符串到存储过程中的一个整数。我以前也遇到过。

以上是关于PyODBC 中的存储过程写道:字符串格式化期间并非所有参数都转换的主要内容,如果未能解决你的问题,请参考以下文章

django-pyodbc 并调用存储过程

无法使用存储过程pyodbc SQL SERVER创建数据库

将Datetime作为参数传递给PyODBC的存储过程时出错

Pyodbc 变量查询

Django With MSSQL using Pyodbc:未保存模型表单

pyodbc 不报告 sql server 错误