0

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

我正在手动构建查询,以便仅在通过 POST 发送 SP 变量时才提供它们,这基本上将我引向了这一点:

我最终得到以下查询和参数元组:

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

4

1 回答 1

1

%通配符添加到values中,并且不要引用参数。您还必须对 Django 原始查询使用%sor%(name)s参数样式:

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

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

于 2013-12-16T10:18:15.107 回答