我使用Twisted異步訪問Python中的數據庫。我的代碼如下所示:在Python中轉義MySQL的unicode字符串(避免exceptions.UnicodeEncodeError)
from twisted.enterprise import adbapi
from MySQLdb import _mysql as mysql
...
txn.execute("""
INSERT INTO users_accounts_data_snapshots (accountid, programid, fieldid, value, timestamp, jobid)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s')
""" % (accountid, programid, record, mysql.escape_string(newrecordslist[record]), ended, jobid))
這個工作,直到我遇到了這個角色:®,這導致線程拋出一個異常:`exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 7: ordinal not in range(128)
但是,如果我不使用MySQLdb_mysql.escape_string( ),當輸入包含引號等時(當然),我得到數據庫錯誤。在訪問數據庫之前發生異常,所以數據庫的整理似乎根本就不重要。
什麼是最好的方式逃脫這個內容,而不會拋出unicode字符的例外情況?理想的解決方案是我可以傳遞unicode字符,不會干擾MySQL的查詢;然而,剝離unicode字符串,用問號替換它們,將它們或其他任何可以停止崩潰的內容都可以接受。
這不僅工作,但現在我不必手動擠壓日期時間對象的字符串。非常感謝你。 – 2010-10-18 15:58:20