Tôi đoán rằng vấn đề là với dấu phần trăm (%
) trong văn bản truy vấn. (Đó không phải là trình giữ chỗ biến ràng buộc trong Django?) Ví dụ:nếu chúng ta định sử dụng một biến liên kết, biến đó có giống như thế này không?
SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;
Tôi nghĩ có thể Django đang quét văn bản SQL của bạn và gặp phải %w
và mong đợi đó là một biến ràng buộc. Hoặc đó, hoặc nó đang chạy sprintf
chức năng kiểu và gặp %w
và mong muốn thay thế trình giữ chỗ đó bằng một giá trị đối số.
(Tôi chưa thử nghiệm; vì vậy đây chỉ là ý tưởng, chỉ là phỏng đoán.)
Như một dự đoán cho một giải pháp, có thể bạn tăng gấp đôi các dấu phần trăm, giống như chúng ta nhận được% nghĩa thông qua một sprintf:
query("SELECT ... ,'%%w') ...");
Nếu điều đó không hiệu quả, thì có thể đó là một ký tự gạch chéo ngược, giống như cách chúng ta thoát các ký tự trong một biểu thức chính quy:
query("SELECT ... ,'\%w') ...");
(Hoặc, bạn có thể cần phải tăng gấp đôi các dấu gạch chéo ngược. Đây chỉ là những phỏng đoán dựa trên các quy ước được sử dụng bởi phần mềm khác.)