无法在游标中提供%通配符.执行查询



我正在使用django-pyodbc从Django与SQL Server接口。我正试图围绕一个存储过程构建一个带有可选参数的查询,并将其传递给cursor.execute

我正在手动构建查询,这样我只在通过POST发送SP变量时才提供这些变量,这基本上让我想到了这一点:

我最终得到了以下查询和params元组:

query = "EXEC spapi_patient_match @PCode = '?', @FName = '%?%', @LName = '%?%'"
params = (u'PC', u'FN', u'LN')

通过执行将这些传递到光标:

cursor.execute(query, params)

我得到错误not enough arguments for format string。我想知道这是否与python字符串中%的使用有关,所以我用以下查询来加倍研究它们:

query = "EXEC spapi_patient_match @PCode = '?', @FName = '%%?%%', @LName = '%%?%%'"

最终出现以下错误:not all arguments converted during string formatting

我也考虑过将通配符移到存储过程定义中,但没有成功,我现在已经阅读了SO也是不明智的。

编辑:正如下面Martijn Pieters所建议的,我已经将通配符移动到值元组中,我同意这可能是正确的方法,但这并没有解决问题,仍然会导致错误not all arguments converted during string formatting

%通配符添加到,并且不引用参数。您还可以使用%s%(name)s参数样式进行Django原始查询:

query = "EXEC spapi_patient_match @PCode = %s, @FName = %s, @LName = %s"
params = (u'PC', u'%FN%', u'%LN%')

使用的Django ODBC插件将SQL参数样式转换为适用于pyodbc适配器的?样式。

相关内容

  • 没有找到相关文章

最新更新