我正在使用Twisted在Python中异步访问数据库。我的代码如下:
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字符,用问号替换它们,搞乱它们或任何其他会停止崩溃的东西都是可以接受的。