Mit gæt er, at problemet er med procenttegnet (%
) i forespørgselsteksten. (Er det ikke en bind variabel pladsholder i Django?) f.eks. hvis vi skulle bruge en bind-variabel, ville det så ikke se sådan ud?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Jeg tror måske, at Django scanner din SQL-tekst og støder på %w
og forventer, at det er en bindevariabel. Enten det, eller også kører den en sprintf
stilfunktion og støder på %w
og forventer at erstatte denne pladsholder med en argumentværdi.
(Jeg har ikke testet, så dette er kun en idé, bare et gæt.)
Som et gæt til en løsning, måske du fordobler procenttegnene, det samme får vi % literaler gennem en sprintf:
query("SELECT ... ,'%%w') ...");
Hvis det ikke virker, så er det måske et omvendt skråstreg, det samme som vi undslipper tegn i et regulært udtryk:
query("SELECT ... ,'\%w') ...");
(Eller du skal muligvis fordoble skråstregene. Disse er blot gæt baseret på konventioner, der bruges af anden software.)