Je suppose que le problème est avec le signe de pourcentage (%
) dans le texte de la requête. (N'est-ce pas un espace réservé de variable de liaison dans Django ?) si nous devions utiliser une variable de liaison, cela ne ressemblerait-il pas à ceci ?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Je pense que Django analyse peut-être votre texte SQL et rencontre %w
et s'attendant à ce que ce soit une variable de liaison. Soit ça, soit il exécute un sprintf
fonction de style et rencontrant le %w
et s'attend à remplacer cet espace réservé par une valeur d'argument.
(Je n'ai pas testé ; ce n'est donc qu'une idée, juste une supposition.)
Comme solution de contournement, vous doublez peut-être les signes de pourcentage, de la même manière que nous obtenons % littéraux via un sprintf :
query("SELECT ... ,'%%w') ...");
Si cela ne fonctionne pas, c'est peut-être une barre oblique inverse, de la même manière que nous échappons des caractères dans une expression régulière :
query("SELECT ... ,'\%w') ...");
(Ou, vous devrez peut-être doubler les barres obliques inverses. Ce ne sont que des suppositions basées sur les conventions utilisées par d'autres logiciels.)