我使用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
。
答案 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
样式。