У меня есть SQL-запрос, который я выполняю с помощью механизма SQLAlchemy:
result = engine.execute('SELECT utf_8_field FROM table')
База данных - это MySQL, а тип столбца - TEXT с кодировкой UTF-8. Тип возвращаемого utf_8_field - "str", даже если я устанавливаю параметр convert_unicode = True при создании движка. Теперь случается так, что если в моей строке есть символ "é" (который не находится в 7-разрядном ASCII, но находится в расширенном наборе ASCII), я получаю UnicodeDecodeError при попытке выполнить это:
utf_8_field.encode("utf-8")
Точная ошибка:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)
При изучении этого я обнаружил, что str.encode не поддерживает расширенный набор символов ASCII! Я нахожу это действительно странным, но это еще один вопрос.
Я не понимаю, почему SQLAlchemy не дает мне строку unicode. Раньше я использовал DB-API, и он работал нормально. У меня также нет табличных объектов SQLAlchemy для моих таблиц, поэтому я использую команду execute.
Любая идея?