Почему SQLAlchemy create_engine с charset = utf8 возвращает тип python <str>, а не тип <unicode>?

Используя Python 2.7 и SQLAlchemy 0.7, я подключаюсь к базе данных MySQL с помощью команды:

engine = create_engine('mysql://username:password@host/dbname?charset=utf8',echo=False) 

Согласно документам SQLAlchemy, установка charset = utf8 автоматически подразумевает use_unicode = 1, так что все строки должны возвращаться как unicode. http://docs.sqlalchemy.org/en/rel_0_7/dialects/mysql.html специально дает пример

кодировка клиента #set для utf8; все строки возвращаются как unicode create_engine ('mysql + mysqldb: /// mydb? charset = utf8')

Итак, почему тогда, когда я запрашиваю текстовое поле в сопоставленном классе, это поле заканчивается типом «str»?

 Base = declarative_base(engine) class RegionTranslation(Base): '''''' __tablename__ = 'RegionTranslation' __table_args__ = {'autoload':True} def __init__(self, region_id, lang_id, name): self.region_id = region_id self.lang_id = lang_id self.name = name rtrans = session.query(RegionTranslation).filter_by(region_id = 1, lang_id = 6).one() print (type(rtrans.name)) 

Выход

  <type 'str'> 

Если я просто соглашусь с этим и расшифрую строку перед ее использованием, все будет в порядке. Но я не понимаю, почему приведенный выше код не возвращает тип «unicode». Может кто-нибудь, пожалуйста, объясните это?

One Solution collect form web for “Почему SQLAlchemy create_engine с charset = utf8 возвращает тип python <str>, а не тип <unicode>?”

Наконец нашел ответ, обнаружив, что другой скрипт, который я успешно выполнял много раз, больше не работал.

Я изменил сортировку в моей базе данных с utf8_general_ci на utf8_bin. В MySQLdb 1.2.3 есть ошибка, которая заставляет строки utf8_bin не распознаваться как текст, поэтому преобразование в unicode не происходит. Это было исправлено в MySQLdb 1.2.4.

https://sourceforge.net/p/mysql-python/bugs/289/

  • Python encoded utf-8 string \ xc4 \ x91 в Java
  • Python открывает CSV-файл с предположительно смешанными кодировками?
  • Pandas df.to_csv ("file.csv" encode = "utf-8") все еще дает символы мусора для знака минус
  • Вопросы преобразования UTF-8 latin-1, python django
  • Как читать файлы UTF-8 с помощью Pandas?
  • Почему этот HTML-шаблон на jinja2 / python создает ошибку 'u ()' tuple при замене строк?
  • Почему Python настаивает на использовании ascii?
  • Можете искать и сообщать работу с закодированными UTF-8 документами в Python?
  • Python - лучший язык программирования в мире.