Domyślam się, że problem dotyczy znaku procentu (%
) w tekście zapytania. (Czy nie jest to symbol zastępczy zmiennej bind w Django?) Np. gdybyśmy mieli użyć zmiennej bind, czy nie wyglądałoby to mniej więcej tak?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Myślę, że może Django skanuje twój tekst SQL i napotyka %w
i oczekując, że będzie to zmienna wiązania. Albo to, albo uruchamia sprintf
funkcji stylu i napotkanie %w
i oczekując zastąpienia tego symbolu zastępczego wartością argumentu.
(Nie testowałem; więc to tylko pomysł, tylko przypuszczenie.)
Jako zgadywanie w obejściu, może podwajasz znaki procentu, tak samo jak otrzymujemy literały % poprzez sprintf:
query("SELECT ... ,'%%w') ...");
Jeśli to nie zadziała, to może jest to znak odwrotnego ukośnika, tak samo jak zmieniamy znaki w wyrażeniu regularnym:
query("SELECT ... ,'\%w') ...");
(Lub może być konieczne podwojenie ukośników odwrotnych. To tylko domysły oparte na konwencjach używanych przez inne oprogramowanie.)