Supongo que el problema está en el signo de porcentaje (%
) en el texto de la consulta. (¿No es eso un marcador de posición de variable de vinculación en Django?), p. si fuéramos a usar una variable de vinculación, ¿no se vería así?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Creo que tal vez Django está escaneando tu texto SQL y encontrando %w
y esperando que sea una variable de vinculación. O eso, o está ejecutando un sprintf
función de estilo, y encontrar el %w
y esperando reemplazar ese marcador de posición con un valor de argumento.
(No lo he probado, así que esto es solo una idea, solo una suposición).
Como una suposición para una solución alternativa, tal vez duplique los signos de porcentaje, lo mismo obtenemos % de literales a través de un sprintf:
query("SELECT ... ,'%%w') ...");
Si eso no funciona, entonces tal vez sea un carácter de barra invertida, los mismos caracteres de escape en una expresión regular:
query("SELECT ... ,'\%w') ...");
(O bien, es posible que deba duplicar las barras invertidas. Estas son solo conjeturas basadas en convenciones utilizadas por otro software).