Dugaan saya adalah masalahnya ada pada tanda persen (%
) dalam teks kueri. (Bukankah itu tempat penampung variabel ikat di Django?) mis. jika kita akan menggunakan variabel bind, bukankah itu akan terlihat seperti ini?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Saya pikir mungkin Django sedang memindai teks SQL Anda dan menemukan %w
dan mengharapkan itu menjadi variabel pengikat. Entah itu, atau menjalankan sprintf
fungsi gaya, dan menemukan %w
dan berharap untuk mengganti placeholder itu dengan nilai argumen.
(Saya belum menguji; jadi ini hanya ide, hanya tebakan.)
Sebagai tebakan untuk solusinya, mungkin Anda menggandakan tanda persen, sama seperti kita mendapatkan % literal melalui sprintf:
query("SELECT ... ,'%%w') ...");
Jika itu tidak berhasil, maka mungkin itu adalah karakter garis miring terbalik, sama seperti kita menghindari karakter dalam ekspresi reguler:
query("SELECT ... ,'\%w') ...");
(Atau, Anda mungkin perlu menggandakan garis miring terbalik. Ini hanya tebakan berdasarkan konvensi yang digunakan oleh perangkat lunak lain.)