La mia ipotesi è che il problema sia con il segno di percentuale (%
) nel testo della query. (Non è un segnaposto di variabile bind in Django?) es. se dovessimo usare una variabile bind, non sarebbe qualcosa del genere?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Penso che forse Django sta scansionando il tuo testo SQL e sta incontrando %w
e aspettandosi che sia una variabile di collegamento. O quello, o sta eseguendo un sprintf
funzione di stile e incontrando il %w
e prevedendo di sostituire quel segnaposto con un valore di argomento.
(Non ho testato, quindi questa è solo un'idea, solo un'ipotesi.)
Come ipotesi per una soluzione alternativa, forse raddoppi i segni di percentuale, lo stesso che otteniamo % letterali tramite uno sprintf:
query("SELECT ... ,'%%w') ...");
Se non funziona, allora forse è un carattere barra rovesciata, lo stesso che sfuggiamo ai caratteri in un'espressione regolare:
query("SELECT ... ,'\%w') ...");
(Oppure potresti dover raddoppiare le barre inverse. Queste sono solo ipotesi basate su convenzioni utilizzate da altri software.)