0

を使用して Django から SQL Server とやり取りしていdjango-pyodbcます。に渡すストアド プロシージャの周りにオプションのパラメーターを使用してクエリを作成しようとしていますcursor.execute

SP 変数が POST 経由で送信された場合にのみ提供するように、クエリを手動で作成しています。

最終的に、次のクエリとパラメーターのタプルになります。

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

これらを execute 経由でカーソルに渡します。

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

%にワイルドカードを追加し、パラメーターを引用符で囲まないでください。また、Django の raw クエリにはまたはパラメータ スタイルを使用する必要あります。%s%(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 に答える