2011-06-07 38 views
0

我有一個很長的查詢,我需要執行,並且我正在使用預準備語句將值插入到查詢中。據我所知,這是假設工作,但它不工作!Python/Mysql:拒絕轉義字符串!

下面的代碼:

cursor = connection.cursor() 
    rows = cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,)) 
    rows = cursor.fetchall() 
    rows = text_position(rows) 

如果我插入一個簡單的引號它打破,而同樣的事情,如果我將任何非英語字符。當我將陳述包裹在它們中時,它使用雙引號。有什麼建議麼?

+0

有什麼錯誤:

一旦你完成調試,就可以關閉記錄的mysqld,並重新啓動它?發佈實際的SQL語句也會有所幫助 – dfb 2011-06-07 17:33:54

+0

這是因爲你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在''test''附近使用正確的語法)ON DUPLICATE KEY UPDATE count = count + 1'at line 1'。當我插入一個非英文字符時,我得到這個''ascii'編解碼器不能編碼字符u'\ xf6'在位置6:序號不在範圍(128)'中。對不起,我無法發佈查詢,但我可以告訴你這是一個全文搜索。我希望這有助於.. – qwerty 2011-06-07 17:37:09

+0

我剛解決了它!這只是我犯的一個錯誤,我在另一個查詢中使用了相同的變量,這就是引發錯誤的查詢,而不是這個。雖然謝謝! – qwerty 2011-06-07 17:41:09

回答

0

這對於調試SQL(從另一種語言產生特別是,像Python)的一般技術:

停止MySQL服務器(假設你運行mysqld的無記錄):

sudo invoke-rc.d mysql stop 

運行mysqld打開日誌記錄:

sudo mysqld --log=/tmp/myquery.log 

運行腳本。

在/tmp/myquery.log中查找MySQLdb發送給mysqld的SQL命令。

這可能給你足夠的線索來解決問題的,否則,請在Python

cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,)) 

和相應的SQL發佈完整的SQL命令在/tmp/myquery.log mysqld的所見。

sudo invoke-rc.d mysql restart