Если вы получаете исключение из Python, то это не имеет ничего общего с MySQL - ошибка происходит перед отправкой выражения в MySQL. Я бы предположил, что драйвер MySQLdb не обрабатывает Unicode.
Если вы имеете дело с необработанным интерфейсом MySQLdb, это будет несколько раздражать (обертки базы данных, такие как SQLAlchemy, будут обрабатывать это за вас), но вы можете создать такую функцию:
def exec_sql(conn_or_cursor, sql, *args, **kw):
if hasattr(conn_or_cursor):
cursor = conn_or_cursor.cursor()
else:
cursor = conn_or_cursor
cursor.execute(_convert_utf8(sql), *(_convert_utf8(a) for a in args),
**dict((n, _convert_utf8(v)) for n, v in kw.iteritems()))
return cursor
def _convert_utf8(value):
if isinstance(value, unicode):
return value.encode('utf8')
else:
return value