Предполагам, че проблемът е в знака за процент (%
) в текста на заявката. (Това не е ли заместител на променлива за свързване в Django?) напр. ако щяхме да използваме променлива за свързване, нямаше ли да изглежда така?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Мисля, че може би Django сканира вашия SQL текст и среща %w
и очакваме това да бъде свързваща променлива. Или това, или изпълнява sprintf
стилова функция и срещане на %w
и очаква да замени този контейнер със стойност на аргумент.
(Не съм тествал; така че това е само идея, само предположение.)
Като предположение за заобиколно решение, може би ще удвоите знаците за процент, същото, което получаваме % литерали чрез sprintf:
query("SELECT ... ,'%%w') ...");
Ако това не работи, тогава може би това е обратна наклонена черта, същото, което екранираме в регулярен израз:
query("SELECT ... ,'\%w') ...");
(Или може да се наложи да удвоите обратните наклонени черти. Това са само предположения въз основа на конвенции, използвани от друг софтуер.)