Ik vermoed dat het probleem zit in het procentteken (%
) in de vraagtekst. (Is dat niet een tijdelijke aanduiding voor een bindvariabele in Django?) b.v. als we een bindvariabele zouden gebruiken, zou dat er dan niet ongeveer zo uitzien?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Ik denk dat Django misschien je SQL-tekst scant en %w
tegenkomt en verwachten dat dat een bindingsvariabele is. Ofwel dat, of het draait een sprintf
stijlfunctie, en het tegenkomen van de %w
en verwacht die tijdelijke aanduiding te vervangen door een argumentwaarde.
(Ik heb het niet getest, dus dit is slechts een idee, slechts een gok.)
Als een gok voor een tijdelijke oplossing, verdubbelt u misschien de procenttekens, hetzelfde krijgen we % literals via een sprintf:
query("SELECT ... ,'%%w') ...");
Als dat niet werkt, is het misschien een backslash-teken, hetzelfde als we escapetekens in een reguliere expressie:
query("SELECT ... ,'\%w') ...");
(Of misschien moet u de backslashes verdubbelen. Dit zijn slechts gissingen op basis van conventies die door andere software worden gebruikt.)