Min gissning är att problemet är med procenttecknet (%
) i frågetexten. (Är det inte en bind variabel platshållare i Django?) t.ex. om vi skulle använda en bindningsvariabel, skulle det inte se ut ungefär så här?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Jag tror att Django kanske skannar din SQL-text och stöter på %w
och förväntar sig att det är en bindningsvariabel. Antingen det, eller så kör den en sprintf
stilfunktion och stöter på %w
och förväntar sig att ersätta den platshållaren med ett argumentvärde.
(Jag har inte testat, så det här är bara en idé, bara en gissning.)
Som en gissning till en lösning, kanske du dubblar procenttecknen, samma sak som vi får % literaler genom en sprintf:
query("SELECT ... ,'%%w') ...");
Om det inte fungerar, så kanske det är ett omvänt snedstreck, samma som vi undslipper tecken i ett reguljärt uttryck:
query("SELECT ... ,'\%w') ...");
(Eller så kan du behöva dubbla omvända snedstreck. Dessa är bara gissningar baserade på konventioner som används av annan programvara.)