Я использую 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, которые не будут мешать запросу, в MySQL без каких-либо ограничений; однако допустимо удаление строки символов Юникода, замена их на вопросительные знаки, искажение или что-либо еще, что остановит сбои.