无法在cursor.execute查询中提供%通配符

时间:2013-12-16 10:15:31

标签: python tsql python-2.7 pyodbc django-pyodbc

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

我正在手动构建查询,以便我只提供SP变量(如果它们是通过POST发送的),这实际上引导我到这一点:

我最终得到以下查询和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

1 个答案:

答案 0 :(得分:1)

%通配符添加到,并且不引用参数。您还 使用%s or %(name)s parameter styles for Django raw queries

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

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