SQLAlchemy和UnicodeDecodeError

use*_*915 10 python mysql unicode encoding sqlalchemy

我越来越

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

当我将来自我使用SQLAlchemy访问的MySQL数据库的文本传递给此函数时:

re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)
Run Code Online (Sandbox Code Playgroud)

数据库编码是utf-8,我甚至将编码传递给SQLAlchemy的create_engine函数.

编辑: 这是我查询数据库的方式:

doc = session.query(Document).get(doc_id)
s = doc.title
Run Code Online (Sandbox Code Playgroud)

根据建议,我将s.decode('utf-8')传递给了sub.上面的错误消失了,但是我为另一个文档得到了不同的错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

数据库表的定义如下:

CREATE TABLE `articles` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `cdate` datetime DEFAULT NULL,
  `link` varchar(255) DEFAULT NULL,
  `content` text,
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `link_idx` (`link`)
) ENGINE=InnoDB AUTO_INCREMENT=4127834 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

use*_*915 35

我已经解决了这个问题.titleSQLAlchemy 将该列作为a str而不是返回Unicode.我认为添加encoding='utf8'作为参数可以解决create_engine这个问题,但是,正确的方法是将它传递给数据库URI : mysql://me@myserver/mydatabase?charset=utf8.

谢谢你的所有答案!

  • 我只是得到`无效的连接选项"charset"`= / (6认同)
  • 这是一个救星!:-) (3认同)